当我们在make menuconfig把一些源码文件以作为编译控制项时,表示不编译内核,而是以模块(.ko)存在.此时,要生成.ko模块文件,需要借助下面的命令:
bash> cd /usr/src/linux-X.Y.Z
bash> make modules
上述命令帮助我们生成目标内核的.ko模块文件.如果需要安装.ko文件,则需要借助下面的命令:
bash>make modules_install
当然,上述一般在PC上才如此智能,如果是在嵌入式平台,一般需要手动加载.
通常与模块(.ko)相关的工具有:insmod、rmmod、lsmod、modprobe、modinfo和depmod.
1.insmod:
常用的模块加载工具.
2.rmmod:
常用的模块卸载工具.
3.lsmod:
罗列当前系统所装载的模块.
4.modprobe:
modprobe是一个比insmod更智能的版本,它先分析/lib/modules/X.Y.Z/modules.dep文件再加载它所依赖的模块.例如要挂载一个USB笔式驱动器上的VFAT(Virtual File Allocation Table,虚拟文件根本表)分区,可以使用modprobe加载VFAT文件系统驱动程序:
bash>modprobe vfat
bash>lsmod
Modle Size Used by
vfat 14208 0
fat 49052 1 vfat
nls_base 9728 2 vfat, fat
lsmod一下,发现modprobe加载的是三个而不是一个模块.modprobe首先发现它不得不加载/lib/modules/X.Y.Z/kernel/fs/vfat/vfat.ko,当查看/lib/modules/X.Y.Z/modules.dep模块依赖文件的时候,它发现了如下代码并由此意识到自己必须首先加载另外2个模块:
/lib/modules/X.Y.Z/kernel/fs/vfat.ko
/lib/modules/X.Y.Z/kernel/fs/fat/fat.ko
/lib/modules/X.Y.Z/kernel/fs/nls/nls_base.ko
于是它先加载了fat.ko和nls_base.ko这2个模块,之后加载vfat.ko,这样,所有挂载VFAT分区时所需要的模块都被自动加载了.
5.modinfo:
提取刚加载的模块的信息:
bash>modinfo vfat
filename: /lib/modules/X.Y.Z/kernel/fs/vfat/vfat.ko
license:GPL
description:VFAT filesystem support
...
depends: fat,nls_base
6.depmod
创建模块依赖关系的列表.常用选项如下:
# depmod -a 注:为所有列在/etc/modprobe.conf 或/etc/modules.conf 中的所有模块创建依赖关系,并且写入到modules.dep文件;
# depmod -e 注:列出已挂载但不可用的模块;
# depmod -n 注:列出所有模块的依赖关系,但仅仅是输出出来 (Write the dependency file on stdout only)