嵌入式(驱动-基础):06---内核模块命令(insmod、rmmod、modprobe、lsmod、modinfo),/proc/modules,/sys/module,/lib/modules/

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41453285/article/details/102777687

一、为什么使用内核模块

如果一次性把所有的功能都编译到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

  • 用来移除一个内核模块

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/102777687