一、内核
内核一般是压缩文件,使用内核之前,需要解压缩然后加载到内存中
二、内核模块(.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