[摘要]:本文主要介绍了在内核模块中,如何使用模块工具加载模块驱动、卸载模块驱动、显示已经加载的内核模块信息,以及如何通过模块工具查看内核模块之间的依赖关系、以及如何查看模块的附加信息。并讲解了insmod和modprobe的区别以及rmmod和modprobe的区别。
一..insmod
1.功能:
用来加载内核模块。
2.使用方法:
insmod module_name.ko
如果模块不在当前目录,需要给出模块的具体路径名:
insmod /home/jibo/helloworld/helloworld.ko
二.modprobe
1.功能:
主要用来装载内核模块到运行的内核中,也可以结合参数执行一些其它功能。
2.使用方法:
modprobe module_name
直接跟内核模块名,不用加具体的路径信息。
note:insmod和modprobe又有什么相同点和不同点呢。
(1)相同点:
在Linux中,modprobe和insmod都可以用来加载module。
(2)区别:
1>依赖关系
modprobe可以解决load modue时的依赖关系,比如load moduleA就必须先load moduleB之类的,它是通过/lib/modules/<kernel-version>/modules.dep文件来查找依赖关系的,该依赖文件是通过depmod生成的。因此modprobe可以一次将所有依赖关系的驱动全部加载到内核。insmod不能解决依赖关系。
2》安装方式
modprobe默认会去/lib/modules/<kernel-version>/下面寻找module,一次将所有依赖关系的驱动全部加载到内核,即modprobe在安装内核模块时,不需要路径信息和模块后的后缀.ko。而insmod只在给它的参数中去找module(默认在当前目录找),insmod一次只能加载特定的一个设备驱动,即insmod加载内核模块时要指定内核模块的绝对路径,如果不指定则表示在当前目录下,并且要加模块的后缀.ko。因此,当模块不在/lib/modules/<kernel-version>/下时,选择使用insmod比较好。如果使用modprobe则会提示:
FATAL: Modulemy-mod.ko not found
3>其他功能
modprobe加-r选项可以用来删除模块,而insmod没有该功能。
3.常见参数用法
-a/-all:加载全部的模块
-c/--show-conf 显示所有模块的设置信息
-d/--debug使用debug模式
-l/--list显示可用的模块
-r/--remove:用于删除模块
-v/--verbose:执行时显示详细的信息
-V/-version:显示版本信息
-C/--config configfile :指定版本信息
eg:
modprobe -r module_name 删除模块module_name
modprobe -l | grep module_name 查看module_name是否编译进内核。等价于lsmod| grep module_name
三.rmmod
1.功能:
删除不需要的模块。
2.使用方法:
rmmod module_name
-a:删除所有目前不需要的模块
-s:把信息输出至syslog常驻服务,而非终端机界面。
-w:若该模块组正被使用,则rmmod会等待该模块组被使用完毕后,才移除他。
note:
用rmmod来去除内存中的模块,加不加后缀ko都可以,而且在任何路径都可以。和modprobe不同,rmmod不会删除一个模块所依赖的模块。如果要想删除模块的依赖模块,则可以使用modprobe -r。
四.lsmod
1.功能:
列出内核已经加载模块的状态,它只是将/proc/modules的内容以格式化式的形式输出。
2.使用方法:
直接使用lsmod就可以。其输出格式为:
Module(模块名) Size(模块大小) Used by(被..使用)
五.depmod
1.功能:
分析可加载模块的依赖性,生成modules.dep文件和映射文件。depmod读取在/lib/modules/version目录下的所有模块,并检查每个模块导出的symbol和需要的symbol,然后创建一个依赖关系列表。默认地,该列表写入到/lib/modules/version目录下的modules.dep文件中。
2.使用方法:
-a:为所有列在/etc/modprobe.conf或/etc/modules.conf 中的所有模块创建依赖关系,并且写入到modules.dep文件
-e:列出已挂载但不可用的模块
-n:列出所有模块的依赖关系,但仅仅是输出出来(Write the dependency file onstdout only)
note:
modules.dep 位于/lib/modules/<shell uname -r> 目录
六.modinfo
1.功能:
显示内核模块的信息,包括模块的作者,模块的说明,某模块所支持的参数以及vermagic。不过这些信息要在内核模块中通过以下函数进行模块声明:
MODULE_AUTHOR(“author”);// 作者
MODULE_DESCRIPTION(“description”);// 描述
MODULE_VERSION(”version_string“);// 版本
MODULE_DEVICE_TABLE(“table_info”);// 设备表
对于 USB , PCI 等设备驱动,通常会创建一个 MODULE_DEVICE_TABLE
MODULE_ALIAS(”alternate_name“);// 别名
2.使用方法:
#modinfo module_name
note:
module_name后不加后缀。