
正文
linux系统module命令 linux modinfo命令
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
linux lsmod命令怎么用
1: 查看已加载模块使用lsmod命令可以进行查看.2: modinfo功能说明:显示kernel模块的信息。
语法:modinfo [-0] [-F field] [modulename|filename ...]
modinfo -Vmodinfo -h补充说明:modinfo会显示kernel模块的对象文件,以显示该模块的相关信息。
参数:-F field 只打印指定的区域的信息。
-a 显示模块作者名称。
-d 显示模块的说明。
-l 显示模块的授权。
-n 显示模块的详细路径及名称。
-p 显示模块所支持的参数。
-h 显示帮助信息。
-V或--version 显示版本信息。
详细参考帮助信息。
相关问答
Q1: linux的makemodules停止什么意思
linux的makemodules停止什么意思?编译横块停了。make modules是编译模块,很多驱动还有功能在选的时候选成M的都是modules,不过直接make,不加任何参数,就是make all
Q2: linux内核模块编译-通过Makefile重命名.ko文件名和模块名
假设模块的源文件为hello.c,源码如下:
使用该文件编译内核模块。
正常情况下,Makefile文件内容如下:
执行 make 命令,生成hello.ko文件。
执行 sudo insmod hello.ko 命令,安装该模块。
执行 lsmod 命令,查看安装的模块。就会看到第一行的就是hello模块。
但是,如果想自定义模块名称为 xmodule ,而不是默认的 hello ,如何实现呢?方法如下:
在Makefile中重命名obj-m并将obj-m的依赖关系设置为原始模块(hello)
修改后的Makefile文件内容如下:
将obj-m设置为 xmodule .o,并使 xmodule .o依赖于 hello .o.
执行 make 命令后,生成 xmodule .ko, 而不是 hello .ko,
安装命令: sudo insmod xmodule.ko
查看命令: lsmod ,就会看到被安装名为 xmodule 的模块。
Q3: 如何编译linux驱动模块
第一步:准备源代码
首先我们还是要来编写一个符合linux格式的模块文件linux系统module命令,这样我们才能开始我们的模块编译。假设我们有一个源文件mymod.c。它的源码如下:
mymodules.c
1. #include linux/module.h /* 引入与模块相关的宏 */
2. #include linux/init.h /* 引入module_init() module_exit()函数 */
3. #include linux/moduleparam.h /* 引入module_param() */
4
5. MODULE_AUTHOR("Yu Qiang");
6. MODULE_LICENSE("GPL");
7
8. static int nbr = 10;
9. module_param(nbr, int, S_IRUGO);
10.
11. static int __init yuer_init(void)
12.{
13. int i;
14. for(i=0; inbr; i++)
15. {
16. printk(KERN_ALERT "Hello, How are you. %d/n", i);
17. }
18. return 0;
19.}
20.
21.static void __exit yuer_exit(void)
22.{
23. printk(KERN_ALERT"I come from yuer's module, I have been unlad./n");
24.}
25.
26. module_init(yuer_init);
27. module_exit(yuer_exit);
我们的源文件就准备的差不多了,这就是一个linux下的模块的基本结构。第9行是导出我们的符号变量nbr。这样在你加载这个模块的时候可以动态修改这个变量的值。稍后将演示。yuer_init()函数将在模块加载的时候运行linux系统module命令,通过输出的结果可以看到我们的模块是否加载成功。
第二步:编写Makefile文件
首先还是来看看我们Makefile的源文件,然后我们再来解释linux系统module命令;
Makefile
obj-m := modules.o #要生成的模块名
modules-objs:= mymod.o #生成这个模块名所需要的目标文件
KDIR := /lib/modules/`uname -r`/build
PWD := $(shell pwd)
default:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o .* .cmd *.ko *.mod.c .tmp_versions
ARM平台
Makefile
obj-m += mymod.o
KDIR := /home/workspace2/kernel/linux-2.6.25 #如果是用于arm平台,则内核路径为arm内核的路径
PWD = $(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -rf *.o
在arm板上插入是
insmod mymod
如果出现以下错误
insmod: chdir(/lib/modules): No such file or directory
则运行
mkdir /lib/modules/2.6.25 (与arm内核版本相同)
并将mymod.ko文件复制到该目录下
cp mymod.ko /lib/modules/2.6.25
然后再执行 (insmod 只在/lib/modules/2.6.25目录下查找相关驱动模块)
insmod mymod
现在我来说明一下这个Makefile。请记住是大写的Makefile而不是小写的makefilelinux系统module命令;
obj-m :这个变量是指定你要声称哪些模块模块的格式为 obj-m := 模块名.o
modules-objs :这个变量是说明声称模块modules需要的目标文件 格式要求 模块名-objs := 目标文件
切记:模块的名字不能取与目标文件相同的名字。如在这里模块名不能取成 mymodlinux系统module命令;
KDIR :这是我们正在运行的操作系统内核编译目录。也就是编译模块需要的环境
M= :指定我们源文件的位置
PWD :这是当前工作路径$(shell )是make的一个内置函数。用来执行shell命令。
第三步:编译模块
现在我们已经准备好了我们所需要的源文件和相应的Makefile。我们现在就可以编译了。在终端进入源文件目录输入make
运行结果:
make[1]: Entering directory `/usr/src/linux-headers-2.6.24-24-generic'
CC [M] /home/yuqiang/桌面/mymodule/mymodules.o
LD [M] /home/yuqiang/桌面/mymodule/modules.o
Building modules, stage 2.
MODPOST 1 modules
CC /home/yuqiang/桌面/mymodule/modules.mod.o
LD [M] /home/yuqiang/桌面/mymodule/modules.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.24-24-generic'
第四步:加载/卸载我们的模块
从上面的编译中我可以看到。已经有一个modules.ko生成了。这就是我们的模块了。现在我们就可以来加载了。
首先在终端输入:sudo insmod modules.ko
现在我们来看看我们的模块加载成功没有呢?
在终端输入:dmesg | tail -12 这是查看内核输出信息的意思。tail -12 显示最后12条;
显示结果如下:
[17945.024417] sd 9:0:0:0: Attached scsi generic sg2 type 0
[18046.790019] usb 5-8: USB disconnect, address 9
[19934.224812] Hello, How are you. 0
[19934.224817] Hello, How are you. 1
[19934.224818] Hello, How are you. 2
[19934.224820] Hello, How are you. 3
[19934.224821] Hello, How are you. 4
[19934.224822] Hello, How are you. 5
[19934.224824] Hello, How are you. 6
[19934.224825] Hello, How are you. 7
[19934.224826] Hello, How are you. 8
[19934.224828] Hello, How are you. 9
看到了吧。我们的模块的初始化函数yuer_init();已经成功运行了。说明我们的模块已经加载成功;
现在我们再来卸载模块试试看。
在终端输入:sudo rmmod modules
在终端输入:dmesg | tail -3
[19934.224826] Hello, How are you. 8
[19934.224828] Hello, How are you. 9
[20412.046932] I come from yuer's module, I have been unlad.
可以从打印的信息中看到,我们的模块的退出函数已经被执行了。说明我们的模块已经被成功的卸载了。到目前位置我们就已经算是对模块的编译到编译运行算是有了一个整体上的认识了。对于以后深入的学习还是应该有点帮助的。下面我们将在看看于模块相关的一些简单的操作。
第五步:加载模块时传递参数
在终端输入:sudo insmod module_name.ko nbr=4
在终端输入:dmesg | tail -6
显示结果如下:
[20800.655694] Hello, How are you. 9
[21318.675593] I come from onefile module, I have been unlad.
[21334.425373] Hello, How are you. 0
[21334.425378] Hello, How are you. 1
[21334.425380] Hello, How are you. 2
[21334.425381] Hello, How are you. 3
这样我们就可以看到在模块加载的时候动态设置了我们的一个变量。初始化函数中的循环只执行了4次。
可能你会问我怎么知道一个模块可以设置那些变量呢。当然,你可以先不设变量加载一次。然后可以在终端输入ls /sys/module/modules_name/parameters/来查看。在这里我们是这样输入的
在终端输入:ls /sys/moedle/modules/parameters/
显示结果:
nbr
如果我们的模块加载成功了。最后我们还可以通过modinfo来查看我们的模块信息。如下
在终端输入:sudo modinfo modules.ko
显示结果:
filename: modules.ko
license: GPL
author: Yu Qiang
srcversion: 20E9C3C4E02D130E6E92533
depends:
vermagic: 2.6.24-24-generic SMP mod_unload 586
parm: nbr:int
Q4: 什么是Linux设备驱动程序代码module
很多情况下,我们期望通过参数来控制我们的驱动的行为,比如由于系统的不同,而为了保证我们驱动有较好的移植性,我们有时候期望通过传递参数来控制我们驱动的行为,这样不同的系统中,驱动可能有不同的行为控制。
为了满足这种需求,内核允许对驱动程序指定参数,而这些参数可在加载驱动的过程中动态的改变
参数的来源主要有两个
使用insmod/modprobe ./xxx.ko时候在命令行后直接给出参数;
modprobe命令装载模块时可以从它的配置文件/etc/modprobe.conf文件中读取参数值
这个宏必须放在任何函数之外,通常实在源文件的头部
模块参数传递的方式
对于如何向模块传递参数,Linux kernel 提供了一个简单的框架。其允许驱动程序声明参数,并且用户在系统启动或模块装载时为参数指定相应值,在驱动程序里,参数的用法如同全局变量。
使用下面的宏时需要包含头文件linux/moduleparam.h
宏
module_param(name, type, perm);module_param_array(name, type, num_point, perm);module_param_named(name_out, name_in, type, perm);module_param_string(name, string, len, perm);
MODULE_PARM_DESC(name, describe);
Q5: 如何向模块传递参数,module
1. 现象描述
Linux系统中linux系统module命令,动态加载的模块往往需要实现linux系统module命令:
1)在加载模块时linux系统module命令,向模块传递一个参数值,且该参数值在模块运行过程中不能对其进行修改;
2)在加载模块时,向模块传递一个参数值,且该参数值在模块运行过程中根据需求对其进行动态修改。
2. 关键过程
1、Linux系统2.6内核下,可以通过宏module_param(name, type, perm)将参数name声明为模块参数,该参数值可以在加载模块时指定,否则为模块内定义的缺省值;
2、我们需要关注perm,perm表示此参数在sysfs文件系统中所对应的文件节点的属性:
1)当perm为0时,表示此参数不存在在sysfs文件系统下对应的文件节点;
2)模块被加载后,在/sys/module/目录下将出现以此模块名命名的目录;
3)如果此模块存在perm不为0的命令行参数,在此模块的目录下将出现parameters目录,包含一系列以参数命名的文件节点;
4)这些文件的权限值等于perm,文件的内容为参数的值。
3、perm有四种不同属性的模块参数:
1)可读写参数:此参数可以实时查看和动态修改其值;其属性为S_IRUGO|S_IWUSR;
2)可读参数:此参数只能实时查看,不能动态修改;其属性为S_IRUGO;
3)可写参数:此参数不能实时查看,但可以动态修改;其属性为S_IWUSR;
4)不可读写参数:此参数不能在sysfs文件系统中显示,也不能实时查看和动态修改其值;其属性值为0;
关于linux系统module命令和linux modinfo命令的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。






