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
标签:depmod,lsmod,dep,modules,内核,模块,内核模块,加载 来源: https://blog.csdn.net/qq_41453285/article/details/88636238