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这一行参数显示了出来。
那为什么要对模块的参数加入描述信息呢?
是为了让用户知道要加载这个驱动可以传入哪些参数,其中包括参数类型,名称等。
Linux驱动代码中MODULE_PARM_DESC的作用相关推荐
- Linux驱动调试中的Debugfs的使用简介
Linux驱动调试中的Debugfs的使用简介 (2012-03-31 14:14) 在调试linux驱动的时候,可以用debugfs来调试,debugfs类似字符设备驱动一样,甚至更简单,不需要主设 ...
- Linux驱动调试中的Debugfs的使用简介 CONFIG_DEBUG_FS 的功能与配置
Linux驱动调试中的Debugfs的使用简介 (2012-03-31 14:14) 在调试linux驱动的时候,可以用debugfs来调试,debugfs类似字符设备驱动一样,甚至更简单,不需要主设 ...
- LINUX驱动模型中bus与platform_bus区别和异同
LINUX驱动模型中bus与platform_bus区别和异同 首先要明确的是platform_bus是BUS的一个字集,也就是说platform_bus是BUS定义的一个总线类型.可以看到pl ...
- Linux驱动编程中EXPORT_SYMBOL()介绍
一.查看内核驱动代码你会发现很多的函数带有EXPORT_SYMBOL()宏定义. 二.那么EXPORT_SYMBOL的作用是什么? EXPORT_SYMBOL标签内定义的函数或者 ...
- 【引用】linux驱动开发中open 方法
open 方法提供给驱动来做任何的初始化来准备后续的操作. 在大部分驱动中, open 应当进行下面的 工作: ● 检查设备特定的错误(例如设备没准备好, 或者类似的硬件错误 ● 如果 ...
- 如何在驱动代码中中/dev目录内自动创建
在<linux /dev>文章中指出,一般驱动加载之后,需要根据申请到的字符设备号通过使用mknod命令将相对应使用到的字符驱动挂载到/dev目录内,这套方法使用起来非常麻烦,因为每次挂载 ...
- Linux驱动开发中与设备树相关的6种debug方法
整理出了6种驱动开发时与设备注册.设备树相关的调试方法,彼此间没有优先级之分,每种方法不一定是最优解,但可以作为一种debug查找问题的手段,快速定位问题原因.例如在芯片验证时,不同时钟频率下系统启动 ...
- linux在代码中表示什么意思,Linux代码中的unlikely和likely分别是什么意思?
Linux代码中的unlikely和likely分别是什么意思? 我在Linux代码中没有找unlikely和likely的定义. 在源代码中搜索出来很多无法找. 请各位赐教! 谢谢! | 内核里有很 ...
- Linux驱动开发中的中间件:设备树
Linux设备树 设备树的产生是为了解决内核源码的arch/arm目录下代码混乱和臃肿的问题(过去每个厂商出个板子就要提供外设硬件和平台硬件信息,这些信息以.c和.h文件的形式呈现).在使用设备树之后 ...
最新文章
- leetcode算法题--摆动序列★
- C语言实现一种简单的应用服务器内部数据结构的思路(三)
- linux unbuntu屏幕显示不完整,解决 NetBeans 在 Gnome3 显示不全的问题
- Qt之QTemporaryDir用法(创建临时目录)
- MapReduce之OutputFormat理解
- python复制文件夹不阻塞_Python线程,线程不阻塞
- HBase 源码解析
- JavaScript实现大数据(条形统计图表)
- 缓冲区溢出实例(一)--Windows
- PS调色类插件哪家强
- php 随机字符串函数,PHP 生成随机字符串的方法函数
- 简单有一定效果的条纹噪声消除算法
- html中写模态框,Html 模态框操作
- 向下取整符号_22. 为什么 Python 中的整除是向下取整?
- manjaro-安装idea
- 微信开发者工具更换存储目录将C盘数据User Data迁移到D盘
- vscode中嵌入cppcheck进行静态检查,包含插件使用方法
- 学 Flutter 不理解 Widget/Element/Render 三棵树?啥也不是!
- 网络协议 -- 最全的网络协议图
- Datawhale学习笔记-飞桨AI-Task02:头脑风暴:让人拍案叫绝的创意是如何产生的?
热门文章
- 第四章、网络安全之破解windows7密码
- Leaflet学习之路五——动态绘制图形(点、线、圆、多边形)
- C/C++跨平台的的预编译宏
- 户外电源连接解决方案——同为(TOWE)五孔明装工业防水插座
- iOS-方形图片设置成圆形图片
- 西电计算机导论名师,西电周佳社、王泉两名教授被评为省级教学名师
- 官方最新版 沙盘Sanbox[Sanboxd]下载 官方中文版 稳定版
- 我收藏的罗永浩语录MP3(老罗语录)
- EC20 4G 模块里GPS 0183协议里有GGA、GLL、GSA、GSV、RMC、VTG,
- 雷诺又回来了 雷诺江铃D180能否打开中国市场