现在的位置: 首页 > 综合 > 正文

Linux kernel中module相关命令集

2014年01月15日 ⁄ 综合 ⁄ 共 1927字 ⁄ 字号 评论关闭

    Linux的kernel能够以动态的方式加载,卸载模块,以达到减小内核的大小,复杂度,以及增加内核的灵活性。目前,我知道的有lsmod,insmod,rmmod,modprobe四条命令,现在分别总结记录这四条命令,命令后的模块名称均不加后缀(如.ko或.o)。

1:lsmod 即list modules的简称
功能说明:显示已载入系统的所有模块。
语法:lsmod   模块名称
说明:执行lsmod指令,会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,因此在编译核心时,无需把全部的功能都放入核心。你可以将这些功能编译成一个个单独的模块,待需要时再分别载入

一般显示的格式如下:

nfs      170109  0 -          Live 0x129b0000
lockd    51593   1 nfs,       Live 0x128b0000
nls_utf8 1729    0 -          Live 0x12830000
vfat     12097   0 -          Live 0x12823000
fat      38881   1 vfat,      Live 0x1287b000
第一列表示:模块的名字

第二列表示:用到的内存大小,单位为byte

第三列表示:列出当前引用了该模块的实例数,0表示这是没有实例引用该模块

第四列表示:列出它所依赖的模块如果有的话

第五列表示:模块加载的状态,取值只能是Live,Loading或Unloading中的一个

第六列表示:加载的模块在内核中内存地址偏移量,这个信息可用于调试的目的


2:insmod 即insert module的简称
功能说明:载入模块。
语法:insmod [-fkmpsvxX][-o <模块名称>][模块文件][符号名称 = 符号值]
说明:Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。
参数-f  不检查目前kernel版本与模块编译时的kernel版本是否一致,强制将模块载入。 
-k  将模块设置为自动卸除。 
-m  输出模块的载入信息。 
-o<模块名称>  指定模块的名称,可使用模块文件的文件名。 
-p  测试模块是否能正确地载入kernel。 
-s  将所有信息记录在系统记录文件中。 
-v  执行时显示详细的信息。 
-x  不要汇出模块的外部符号。 
-X  汇出模块所有的外部符号,此为预设值。


3:rmmod 即remove module的简称
功能说明:删除模块。
语法:rmmod [-as][模块名称...]
说明:执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,因此在编译核心时,不需把全部的功能都放入核心。你可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。
参数:
-a  删除所有目前不需要的模块。 
-s  把信息输出至syslog常驻服务,而非终端机界面。


4:modprobe 即module probe的简称

功能说明:自动处理可载入模块。
语法:modprobe [-acdlrtvV][--help][模块文件][符号名称 = 符号值]。
说明:modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。

参数
-a或--all  载入全部的模块。 
-c或--show-conf  显示所有模块的设置信息。 
-d或--debug  使用排错模式。 
-l或--list  显示可用的模块。 
-r或--remove  模块闲置不用时,即自动卸载模块。 
-t或--type  指定模块类型。 
-v或--verbose  执行时显示详细的信息。 
-V或--version  显示版本信息。 
-help  显示帮助。


insmod 与 modprobe 都是载入 kernel module,不过一般差别于 modprobe 能够处理 module 载入的相依问题。比方你要载入 a module,但是 a module 要求系统先载入 b module 时,直接用 insmod 挂入通常都会出现错误讯息,不过 modprobe 倒是能够知道先载入 b module 后才载入 a module,如此相依性就会满足。
不过 modprobe 并不是大神,不会厉害到知道 module 之间的相依性为何,该程式是读取 /lib/modules/2.6.xx/modules.dep 档案得知相依性的。而该档案是透过 depmod 程式所建立。(PS:今天遇到想卸载一个module,用rmmod总是失败,后来用modprobe -r就成功卸载了,不知道是不是因为依耐性的问题)。

抱歉!评论已关闭.