首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Linux内核模块驱动加载dmesg调试

因为近期用到了Linux内核相关知识,下面随笔将给出内核模块编写记录,供大家参考。...1、运行环境   Ubuntu 版本:20.04   Linux内核版本:5.4.0-42-generic   gcc版本:gcc version 9.3.0   驱动和一般应用程序执行方式很大不同...2、内核模块模型说明 (1)驱动和一般应用程序执行方式很大不同   一般应用由main函数开始执行,流程基本由程序自身控制   驱动程序没有main函数,由回调方式驱动运行 (2)回调方式:   先向内核注册函数...,然后应用程序触发这些函数执行   例如:驱动程序在初始化时,向内核注册处理某个设备写操作函数   当应用程序使用write系统调用写该设备时,内核就会调用注册上述函数 3、内核模型常见回调函数举例...DriverMMap(struct file *pslFileStruct, struct vm_area_struct *pslVirtualMemoryArea); 16 17 #endif 8、编译内核模块

6.5K20

Linux内核模块详解

通过这一章学习,希望能够理解Linux提出内核模块这个机制意义;理解并掌握Linux实现内核模块机制基本技术路线;运用Linux提供工具和命令,掌握操作内核模块方法。...前面讲到运行在微内核体系操作系统外部用户空间进程不同,模块不是作为一个进程执行,而像其他静态连接内核函数一样,它在内核态代表当前进程执行。...模块实现机制 2.1内核模块和应用程序比较 在深入研究模块实现机制以前,我们有必要了解一下内核模块与我们熟悉应用程序之间区别。...最主要一点,我们必须明确,内核模块是在“内核空间”中运行,而应用程序运行在“用户空间”。内核空间和用户空间是操作系统中最基本两个概念,也许你还不是很清楚它们之间区别,那么我们先一起复习一下。...实例 为了便于更直观地认识内核模块功能,下面用实例来说明模块单元是怎样系统内核交互。 4.1 内核模块make文件 首先我们来看一看模块程序make文件应该怎么写。

8.1K20

Linux内核内核模块加载过程(超详细)

GRUB 加载了内核之后,内核首先会再进行二次系统自检,而不一定使用 BIOS 检测硬件信息。这时内核终于开始替代 BIOS 接管 Linux 启动过程了。...内核完成再次系统自检之后,开始采用动态方式加载每个硬件模块,这个动态模块大家可以想象成硬件驱动(默认 Linux 硬件驱动是不需要手工安装,如果是重要功能,则会直接编译到内核当中;如果是非重要功能...这个文件是一个压缩内核镜像我们已经知道,Linux 会把不重要功能编译成内核模块,在需要时再调用,从而保证了内核不会过大。...在多数 Linux 中,都会把硬件驱动程序编译为模块, 这些模块保存在 /lib/modules 目录中。...如果 Linux 安装在 IDE 硬盘之上,并且采用是默认 ext3/4 文件系统,那么内核启动后加载根分区和模块加载都没有什么问题,系统会顺利启动。

25520

Linux 内核】编译 Linux 内核 ⑦ ( 安装内核模块 | 安装内核 | 重启系统 | 查看当前内核版本 )

文章目录 一、安装内核模块 二、安装内核 三、重启系统 四、查看当前内核版本 一、安装内核模块 ---- 确保 Linux 内核编译完成 , 没有任何报错之后 ; 参考 【Linux 内核】编译 Linux...内核 ⑥ ( 安装 OpenSSL | 安装其它依赖库 | 内核编译完成 ) 博客 ; 进入 Linux 内核源码根目录 , 执行 sudo make modules_install 命令 , 安装编译好内核模块...-5.6.14# root@ubuntu:~/kernel/linux-5.6.14# 二、安装内核 ---- 内核模块安装完成后 , 执行 sudo make install 命令 , 安装内核...; 下面的内核安装过程会持续很长时间 ; 内核安装过程 : root@ubuntu:~# cd kernel/linux-5.6.14 root@ubuntu:~/kernel/linux-5.6.14...查看当前内核版本 , 发现当前内核版本已经

15.2K50

linux内核模块加载命令

目录 一,内核相关命令 1、lsmod 列出已经加载内核模块; 2、modinfo 查看模块信息; 3、modprobe 挂载新模块以及新模块相依赖模块 4、rmmod 移除已挂载模块;...5、depmod 创建模块依赖关系列表 6、insmod 挂载模块; 二,内核模块加载相关配置文件; 1、模块配置文件 modules.conf 或 modprobe.conf 2、内核模块其它配置文件...,有几个参数我们注意一下就行了,目前Linux 发行版所用内核是2.6x版本,是自动解决依赖关系,所以这个命令知道就行了;模块之前也有依赖关系,比如我们想驱动USB 移动硬盘,目前有两种驱动,一种是...; 再举个例子:sata硬盘,在 Linux设备表示是/dev/sd* ,比如 /dev/sda,/dev/sdb 等… 系统要驱动 sata硬盘,则需要把sata在内核中选中,或编译成模块,或内置于内核之中...,不能把文件名后缀省略; 二,内核模块加载相关配置文件; 1、模块配置文件 modules.conf 或 modprobe.conf 内核模块开机自动挂载模块一般是位于一个配置文件,一般Linux

4.9K30

我们离不开 Linux 内核模块 | Linux 中国

Linux 内核今年就要满 30 岁了! 如果你像我们一样对此特别重视,那么让我们本周用几个特别的文章来庆祝 Linux。 今天,我们先来看看来自社区对“你不能没有哪个 Linux 内核模块?...— Stephan Avenwedde #3 最有用内核模块无疑是 snd-hda-intel,因为它支持大多数集成声卡。我可以一边听音乐,一边在 Linux 桌面上编码一个音频编曲器。...于是我用 Linux 重新安装了它,设置了 ftape 内核驱动模块,进行了一些备份/恢复测试,然后将我们最重要备份运行到 QIC 磁带上。在这两个星期里,我们依靠 ftape 备份重要数据。...所以,对于那些让软盘磁带机在 1990 年代 Linux 上工作无名英雄,你真是太厉害了! — Jim Hall #8 嗯,这很简单。是 kvm 内核模块。...你生活中不能没有什么 Linux 内核模块

2.4K31

Linux为什么使用内核模块

我们常常说到操作系统有Linux、Windows、mac OS等等,手机安卓系统就是基于Linux操作系统,这些操作系统从内核角度分为宏内核和微内核Linux是典型内核操作系统,Windows...很明显,它优点是维护性好,功能模块之间交互需要通过微内核提供某种通信机制来建立。华为开发者大会宣布鸿蒙操作系统就是微内核。...然而,对于Linux这种宏内核,缺点也是比较明显,如果想要增减、删除、修改内核某个功能,就得重新编译整个Linux内核内核如果越来越大,那么编译就会变得越慢。...在驱动开发初期,需要经常修改驱动代码,这对驱动开发者来说造成很大困扰,显然是不可接受,所以可维护性差。 为了弥补这一缺陷,Linux内核提供了模块机制,称为内核模块。...注意,内核模块不一定是驱动程序,驱动程序也不一定都是模块形式。

2.5K20

linux 网络内核模块了解01

tasklet_action 和 tasklet_hi_action (分别TASKLET_SOFTIRQ 以及 HI_SOFTIRQ 相关联) void __init softirq_init()...内存缓存 内核分别使用kmalloc 和kfree 函数分配和释放一个内存块。这两个函数语法,类似于另外来自于libc用户空间库姊妹函数malloc 和free 调用。...内核维护其专属内存缓存网络数据结构 套接字缓冲区描述符 邻居协议映射 路由表 关键数据结构 struct sk_buff 一个封包就存储在这里,所有网络分层都会使用这个结构来存储其报头,有关用户数据信息...附加报头比把数据从一个分层拷贝到另一个分层更有效率 内核提供skb_reserve 函数处理 改变指向缓冲区变量。...sbk相关处理函数 数据预留和对齐 skb_reserve skb_put skb_push struct net_device 在Linux 内核中没中网络设备都用这个数据结构表示,包括软硬件配置信息

1.9K10

Rust for Linux | 用 Rust 写 Linux 内核模块

背景| Linux 内核模块 Linux 内核模块在概念和原理层面动态链接模块(DLL或so)类似。...但对于 Linux 来说,内核模块可以在系统运行期间动态扩展系统功能,而无须重新启动系统,更无须重新编译新系统内核镜像。...所以,内核模块这个特性为内核开发者提供了极大便利,因为对于号称世界上最大软件项目的Linux来说,重启或重新编译时间耗费肯定是巨大。...正是因为内核模块这种机制,方便了Linux 贡献者选择设备驱动成为进入 Linux 复杂系统一个入口点,而不会被 Linux 代码复杂性而压倒。...也正是因为内核模块这个特点,Rust for Linux 项目的目标就是让 Rust 成为Linux内核模块开发第二语言。

14.3K22

linux内核版本和发行版本区别_linux内核版本号构成

大家好,又见面了,我是你们朋友全栈君 Linux内核版本和发行版本 1.内核版本 内核是系统心脏,是运行程序和管理像磁盘和打印机等硬件设备核心程序,它提供了一个在裸设备应用程序间抽象层...如2.5.74表示是一个测试版内核,2.6.22表示是一个稳定版内核。读者可以到Linux内核官方网站http://www.kernel.org/下载最新内核代码,如图1-3所示。...图片 图1-3 Linux内核官方网站 2.发行版本 仅有内核而没有应用软件操作系统是无法使用,所以许多公司或社团将内核、源代码及相关应用程序组织构成一个完整操作系统,让一般用户可以简便地安装和使用...(1)Red Hat Linux Red Hat是最成功Linux发行版本之一,它特点是安装和使用简单。Red Hat可以让用户很快享受到Linux强大功能而免去繁琐安装设置工作。...Debian系统 Debian也非常适合做服务器操作系统,Ubuntu比较,它没有太多花哨,稳定压倒一切,对于服务器系统来说是一条不变真理,debian这个linux系统,底层非常稳定,内核和内存占用都非常小

5.6K41

Linuxlsmod命令列出内核模块

lsmod是一个命令行程序,用于显示有关已加载Linux内核模块信息。 内核模块 内核是操作系统核心组件。 它管理系统资源,并且是计算机硬件和软件之间桥梁。...Linux内核具有模块化设计。 内核模块通常称为驱动程序是一段扩展内核功能代码。 模块要么编译为可加载模块,要么内置在内核中。...可加载模块可以根据需要在正在运行内核中进行加载和卸载,而无需重新启动系统。 通常,模块是由udev(设备管理器)按需加载。...内核模块存储在/lib/modules/目录中。 要找到正在运行内核版本,请使用uname -r命令。...在命令行中运行lsmod以了解当前正在加载哪些内核模块: lsmod 该命令在新一行上输出每个已加载内核模块信息: Module Size Used by cmac

3.9K20

linux内核设计实现

内核用C语言编写,移植能力很强 进程创建迅速,独特fork调用 提供了简洁但是稳定进程间通讯原语 1.2 unix和linux linux克隆unix,但不是unix linux借鉴了unix很多设计...CLONE_FS:父子进程共享文件系统信息 CLONE_FILES:共享打开文件 ... 4.3 内核线程 内核线程:独立运行在内核空间标准进程 和普通进程区别:没有独立地址空间,只能在内核空间运行...调度算法 3.1 概述 linux调度程序定义kernel/sched.c 2.5版本内核重写调度算法,和以前版本区别很大,实现以下目标 充分实现O(1)调度,不管多少进程或什么输入,每个算法能在恒定时间内完成...所有支持系统调用硬件体系都要做 定义系统调用号到include/asm/unist.h文件中 函数放入kernel文件下某个位置,使之编译进内核映像(不能被编译称模块) 用户空间如何访问注册系统调用...中断处理程序 响应特定中断时,会执行函数为中断处理程序或中断服务例程 中断处理程序是设备驱动程序一部分,设备驱动程序是用于对设备进行管理内核代码 内核函数区别:中断处理程序是被内核调用来响应中断

2.8K52

Linux添加删除内核

笔者所做工作是需要用到Linux自带分析工具——***ftrace1***该工具中一些专门性工具(姑且叫插件吧)在发行版本中并没有编译到内核中去,所以笔者需要重新编译内核将这些插件勾选上,并安装到自己系统中...具体命令如下(本命令执行目录为***/usr/src/linux-3.19.8/***,如无特别说明下同): # make mrproper 配置3 本步骤主要是为了配置编译选项,比如哪些模块需要编译到内核中去...安装内核 安装模块 执行如下命令: # make modules_install 编译成功后,系统会在***/lib/modules***目录下生成一个3.19.8子目录,里面存放着新内核所有可加载模块...注意 : 模块安装一定要在内核安装之前,否则,安装内核时会提示致命错误:在***/lib/modules***找不到对应模块。...比如,笔者本人就遇到这样奇葩问题:在安装内核后,通过 # dpkg --get-selections|grep linux 命令就找不到刚才安装内核

3.2K30

Python json模块jsonpath模块区别详解

JSON(JavaScript Object Notation)是一种轻量级数据交换格式,它使得人们很容易进行阅读和编写。同时也方便了机器进行解析和生成。...适用于进行数据交互场景,比如网站前台后台之间数据交互。 JSON和XML相比较可谓不相上下。 Python 3.X中自带了JSON模块,直接import json就可以使用了。...对象:对象在js中表示为{ }括起来内容,数据结构为{key1: value1, key2:value2, …}键值对结构,在面向对象语言中,key为对象属性,value为对应属性值,所以很容易理解...json模块 json模块提供了四个功能:dumps、dump、loads、load,用于字符串和Python数据类型间进行转换。...jsonpath 安装方法:下载后解压之后执行 python setup.py install 官方文档:http://goessner.net/articles/JsonPath JsonPathXPath

1.4K10

内核线程fork普通fork区别

每个进程都有1个内核栈,这个内核栈位于内核空间。并且,每个进程还有一个用户栈,位于低地址部分。 当进程陷入内核时候,将会使用内核栈进行处理,当返回用户态时候,又会换回去,使用用户栈。...内核态进程fork 对于在内核态下运行进程而言,其具有在低地址空间进程栈,也具有高地址空间部分内核栈。...内核线程fork 讲了这么久,这才轮到我们主角:内核线程。内核线程fork过程前面提到两者是不同。 首先,我们需要认识一下内核线程。...明白了处理器是如何在栈帧之间跳转之后,我们就能明白为什么必须重写内核栈帧了:直接拷贝内核栈后,新内核栈中每个栈帧内“栈基址寄存器值”内容仍然是父进程内核地址。...然后,将D赋值给A,重复上述过程,直到子线程中所有的栈基址寄存器值被重写。 最后,把子线程fork()栈帧中栈指针进行重写,子线程内核栈就处理完成了。剩余步骤就和普通fork没有区别了。

60510

Linux 内核】宏内核内核架构 ( 操作系统需要满足要素 | 宏内核 | 微内核 | Linux 内核动态加载机制 )

- 微内核 : 将 操作系统 拆分成 多个 独立功能模块 , 这些 独立功能模块 之间通过 " 消息 " 进行通信 , 微内核 效率低 ; 下图中 , 进程 , 文件系统 , 设备驱动 , 内核...; 四、Linux 内核动态加载机制 ---- Linux 内核模块动态加载 : Linux 内核 使用了 模块设计 , 可以进行 动态加载 内核模块 ; Linux 内核 核心实现 , 设备驱动实现..., 可以 编译成一个独立模块 , 这些独立模块可以被编译成 独立目标文件 , 可以在运行时 , 动态 加载 / 卸载 内核模块 ; 开发简单 : Linux 内核模块引入 , 带来了很多便利 , 很多内核驱动..., 都可以 编译成动态 加载 / 卸载 模块 , 驱动开发时 , 必须 遵守规定接口 , 来访问内核 , 这样 开发内核模块 , 变得 更加容易 , 方便 ; 平台无关 : 内核模块 可以 设计成... 平台无关 模块 , 如 : 文件系统 ;

4K30
领券