内核模块编程之模块工具的使用

来源:互联网 发布:剪枝算法 编辑:程序博客网 时间:2024/06/05 00:46

                                                                              内核模块编程之模块工具的使用


Author:tiger-john
Time:2013-08-01

mail:jibo.tiger@gmail.com
Blog:http://blog.csdn.net/tigerjibo/article/details/9708967

转载请注明出处!

[摘要]:本文主要介绍了在内核模块中,如何使用模块工具加载模块驱动、卸载模块驱动、显示已经加载的内核模块信息,以及如何通过模块工具查看内核模块之间的依赖关系、以及如何查看模块的附加信息。并讲解了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后不加后缀。


原创粉丝点击