嵌入式(驱动-基础):06---内核模块命令(insmod、rmmod、modprobe、lsmod、modinfo),/proc/modules,/sys/module,/lib/modules/
一、为什么使用内核模块
如果一次性把所有的功能都编译到Linux内核中,会有两个问题:
- ①生成的内核会很大
- ②如果我们要在现有的内核中新增或删除功能,将不得不重新编译内核
如果使用独立的内核模块:
- 可以动态的加载到内核
- 模块本身不被编译入内核映像,从而控制了内核的大小
- 模块一旦被加载,它就和内核中的其他部分完全一样
二、内核的加载:insmod
- 向内核中添加一个内核模块
三、内核的加载/卸载:modprobe
- modprobe命令比insmod命令要强大,它在加载某模块时,会同时加载该模块所依赖的其他模块
- 使用modprobe命令加载的模块若以“modprobe -r filename”的方式卸载,将同时卸载其依赖的模块
四、模块之间的依赖关系
- 模块之间的依赖关系存放在根文件系统的/lib/modules/<kernel-version>/modules.dep文件中
- 这个文件是在整体编译内核 的时候由depmod工具生成的
- 备注:在/lib/modules目录下有多个内核版本目录
四、查看所有内核模块:lsmod(/proc/modules文件)
- 该命令用来查看内核中已经加载的所有内核模块
- /proc/modules文件:lsmod命令实际上是读取并分析“/proc/modules”文件
五、查看内核模块信息:modinfo
- 该命令用来查看单个内核模块的信息。可以获得模块的信息,包括模块作者、模块的说明、模块所支持的参数以 及vermagic
- 例如下面查看btusb内核模块的信息
六、/sys/module目录
- 内核中已加载模块的信息也存在于/sys/module目录下
- 每添加一个内核模块,就会在这个目录下创建一个文件夹
- 在每个内核模块的目录下又有一个refcnt文件和一个sections目录。下面以btusb内核模块为例
六、移除内核模块:rmmod
- 用来移除一个内核模块