Linux驱动代码中MODULE_PARM_DESC的作用
结论
MODULE_PARM_DESC是用来描述驱动模块的参数信息的。
例如驱动内有这么一行代码:MODULE_PARM_DESC(stacfgpath, "Get path of sta cfg");
假设编译生成的驱动文件为 test.ko
我们使用: modinfo test.ko
#:modinfo test.ko
filename: /home/test/test.ko
license: GPL
srcversion:
depends:
retpoline: Y
name: test
vermagic: 4.15.0-129-generic SMP mod_unload
parm: stacfgpath:Get path of sta cfg (charp)
MODULE_PARM_DESC内描述的信息就会在parm这一行参数显示出来,这样用户就知道要加载这个驱动可以传入哪些参数了。
以下为查找该函数作用的过程
-
问题
在跟踪Linux网络驱动的过程中看到了以下代码段:
static char *stacfgpath = NULL;
module_param(stacfgpath, charp, 0000);
MODULE_PARM_DESC(stacfgpath, "Get path of sta cfg");
那MODULE_PARM_DESC()第二个参数是干嘛的呢?
-
测试
在ubuntu的终端上编写以下测试代码:
编写test.c
#include <linux/module.h>
#include <linux/init.h>
static char *stacfgpath = NULL;
module_param(stacfgpath, charp, 0000);
static int __init test_init(void)
{
printk("test_init\n");
printk("stacfgpath is :%s\n", stacfgpath);
return 0;
}
static void __exit test_exit(void)
{
printk("test_exit\n");
}
module_init(test_init);
module_init(test_exit);
MODULE_LICENSE("GPL");
编写Makefile
编写该文件前需要先确认当前ubuntu系统编译链的位置,然后填入KDIR。
可以查看一下/lib/modules/这个目录,我的是在 /lib/modules/4.15.0-129-generic/build/
obj-m := test.o
KDIR := /lib/modules/4.15.0-129-generic/build/
all:
make -C $(KDIR) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.bak *.order
然后在shell终端输入: make
可见生成的test.ko
安装驱动:
#:sudo insmod test.ko stacfgpath="hello"
卸载驱动:
#:sudo rmmod test.ko
我们发现终端没有打印任何消息出来。
这时需要查看内核打印,使用dmesg。
以下为打印的内容:
test_init
stacfgpath is :hello
test_exit
可见stacfgpath参数被改变hello了。
如果安装驱动时不传参数。
以下为打印的内容:
test_init
stacfgpath is :(null)
test_exit
那 MODULE_PARM_DESC(stacfgpath, "Get path of sta cfg"); 第二个参数的字符串是干嘛的呢,没看到"Get path of sta cfg"这个字符串出现啊。
man insmod
查看了一下,发现
SEE ALSO
modprobe(), rmmod(), lsmod(), modinfo()
在man modinfo
发现可以查看驱动模块的参数信息
NAME
modinfo - show information about a Linux Kernel module
于是尝试了一下:
#:modinfo test.ko
我们发现MODULE_PARM_DESC内描述的信息在parm这一行参数显示了出来。
那为什么要对模块的参数加入描述信息呢?
是为了让用户知道要加载这个驱动可以传入哪些参数,其中包括参数类型,名称等。
上一篇: document.getElementById(), getElementsByname(),getElementsByClassName(),getElementsByTagName()
下一篇: EXCEL文件导入相关
推荐阅读
-
Linux驱动代码中MODULE_PARM_DESC的作用
-
Linux中编译带clock_gettime函数的代码,提示undefined reference to 'clock_gettime'
-
【转】Shell中脚本变量和函数变量的作用域 博客分类: linux命令unix shell作用域shelllocal函数变量
-
【转】Shell中脚本变量和函数变量的作用域 博客分类: linux命令unix shell作用域shelllocal函数变量
-
linux 中 关于与php 代码的
-
解析Linux系统中bashrc和profile文件的作用区别
-
des加密解密算法 - 怎么可以让php代码:62837 << -16 在windows和linux中得到相同的结果?
-
linux内核(驱动)编程中的延时函数都有哪些
-
Linux中关于虚拟机跟分区磁盘扩充空间记录的示例代码分享(图文)
-
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码_PHP教程