Linux(入门基础)113---内核模块(depmod、lsmod、modinfo、insmod、rmmod、modprobe)

一、内核

  • 内核一般是压缩文件,使用内核之前,需要解压缩然后加载到内存中

二、内核模块(.ko文件)

  • 内核都具有【可读取模块化驱动程序】的功能

三、内核与内核模块的文件目录

  • 内核文件:/boot/vmlinuz或/boot/vmlinuz-version
  • 内核解压缩所需的RAM或DIsk:/boot/initramfs或/boot/initramfs-version
  • 内核模块:/lib/modules/version/kernel或/lib/modules/$(uname -r)/kernel
  • 内核源代码:/usr/src/linux或/usr/src/kernel/(要安装才有,默认不安装)

如果内核被顺利加载到系统中,有几个信息会记录下来

  • 内核版本:/proc/version
  • 系统内核功能:/proc/sys/kernel/

四、编译内核模块

如果我们有个新的硬件,但是操作系统不支持,可以进行内核的重新编译

  • 重新编译内核,并加入最新的硬件的驱动程序源代码
  • 将该硬件的驱动程序编译成模块,在启动时加载该模块即可

五、内核模块放置目录

  • 内核模块一般都放置在/lib/modules/version/kernel/这个目录内,这个目录内有分为几个目录

 

  • arch:与硬件平台有关的选项。例如CPU的等级等
  • crypto:内核所支持的加密技术,例如md5或des等
  • drivers:一些硬件的驱动程序,例如显卡、网卡、PCI相关硬件等
  • fs:内核所支持的文件系统,例如vfat、reiserfs、nfs等
  • lib:一些函数库
  • net:与网络有关的各项协议数据,还有防火墙模块(net/ipv4/netfilter/*等)
  • sound:与音效有关的各项模块

六、modules.dep文件

  • 这个文件位于/lib/modules/version/目录下,记录了所有的内核模块的各项依赖性

七、depmod命令

1.功能

  • depmod会跑到模块标准放置目录/lib/modules/version/kernel/,并依据相关目录的定义将全部的模块读出来分析,最终将分析的模块依赖性结果写入modules.dep文件中

2.命令格式

  • depmod  [-Ane]

相关参数与选项

  • 不加任何选项时:depmod命令会分析目前内核的模块,并且重新写入modules.dep文件中
  • -A:加了-A参数,depmod会查找比modules.dep内还要新的模块,只将新的模块写入到modules.dep文件中
  • -n:不将内核模块写入modules.dep文件中,而是将结果输出到屏幕上查看
  • -e:显示出目前以加载的不可执行的模块名称

3.演示案例

例如我有一个网卡驱动程序,文件名为a.ko,因为是新加入的模块,所以我使用depmod来更新模块依赖性的记录文件

  • depmod    //直接输入这个即可

八、lsmod命令

1.功能

  • 查看目前内核加载了多少的模块

2.查看

信息被分为三栏

  • Modele:模块名称
  • Size:模块的大小
  • Used by:此模块是否被其他模块所使用

九、模块依赖性

  • 从上面lsmod显示的信息的Used by栏可以看出,vsock模块被加载之后,vmw_vsock_vmci_transport模块才可以被加载。这就是模块的依赖性

十、modinfo命令

1.功能

  • 查看单一内核模块的相关信息,也可以用来当【检查模块】使用

2.命令格式

  • modinfo  [选项]  内核模块文件名

相关参数与选项

  • -a:仅列出作者名称
  • -d:仅列出该模块的说明
  • -l:仅列出模块授权
  • -n:仅列出该模块的详细路径

3.演示案例

  • 案例一:列出drom模块的相关信息

十一、内核模块的加载与删除

  • modprobe:可以加载/删除模块
  • insmod:加载模块
  • rmmod:删除insmod加载的模块
  • 区别①:insmond是手动的去加载一个模块,你要给出该模块的绝对路径,而modprobe是根据modules.dep文件的内容自动加载/删除模块
  • 区别②:如果模块之间有依赖性,那么使用insmod和rmmod加载/删除模块时就会出错,不允许这样操作。但是modprobe根据modules.dep文件的内容自动加载/删除模块,可以解决依赖性问题

insmod命令

  • 格式:insmod  模块完整路径名

注意事项

  • 模块必须使用完整路径名

演示案例

  • 加载fat.ko这个模块:insmod   /lib/modules/4.4.0-31-generic/kernel/fs/fat/fat.ko

rmmod命令

  • 格式:rmmod  [-fw]  模块名
  • -f:强制将该模块删除,不论是否正在被使用

演示案例

  • 将刚刚加载的fat模块删除:rmmod  fat.ko

modprobe命令

  • 格式:modprobe  [-cfr]  模块名
  • -c:列出目前系统所有的模块(更详细的代号对应表)
  • -f:强制加载该模块
  • -r:删除该模块

注意事项

  • modprobe是根据modules.depmodules.dep文件的内容自动加载/删除模块,可以解决依赖性问题
  • 并且后面的模块名不需要绝对路径

演示案例

  • 加载vfat模块:modprobe  vfat

猜你喜欢

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