结论

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的作用相关推荐

  1. Linux驱动调试中的Debugfs的使用简介

    Linux驱动调试中的Debugfs的使用简介 (2012-03-31 14:14) 在调试linux驱动的时候,可以用debugfs来调试,debugfs类似字符设备驱动一样,甚至更简单,不需要主设 ...

  2. Linux驱动调试中的Debugfs的使用简介 CONFIG_DEBUG_FS 的功能与配置

    Linux驱动调试中的Debugfs的使用简介 (2012-03-31 14:14) 在调试linux驱动的时候,可以用debugfs来调试,debugfs类似字符设备驱动一样,甚至更简单,不需要主设 ...

  3. LINUX驱动模型中bus与platform_bus区别和异同

     LINUX驱动模型中bus与platform_bus区别和异同 首先要明确的是platform_bus是BUS的一个字集,也就是说platform_bus是BUS定义的一个总线类型.可以看到pl ...

  4. Linux驱动编程中EXPORT_SYMBOL()介绍

    一.查看内核驱动代码你会发现很多的函数带有EXPORT_SYMBOL()宏定义. 二.那么EXPORT_SYMBOL的作用是什么?            EXPORT_SYMBOL标签内定义的函数或者 ...

  5. 【引用】linux驱动开发中open 方法

    open 方法提供给驱动来做任何的初始化来准备后续的操作. 在大部分驱动中, open 应当进行下面的 工作: ●     检查设备特定的错误(例如设备没准备好, 或者类似的硬件错误 ●     如果 ...

  6. 如何在驱动代码中中/dev目录内自动创建

    在<linux /dev>文章中指出,一般驱动加载之后,需要根据申请到的字符设备号通过使用mknod命令将相对应使用到的字符驱动挂载到/dev目录内,这套方法使用起来非常麻烦,因为每次挂载 ...

  7. Linux驱动开发中与设备树相关的6种debug方法

    整理出了6种驱动开发时与设备注册.设备树相关的调试方法,彼此间没有优先级之分,每种方法不一定是最优解,但可以作为一种debug查找问题的手段,快速定位问题原因.例如在芯片验证时,不同时钟频率下系统启动 ...

  8. linux在代码中表示什么意思,Linux代码中的unlikely和likely分别是什么意思?

    Linux代码中的unlikely和likely分别是什么意思? 我在Linux代码中没有找unlikely和likely的定义. 在源代码中搜索出来很多无法找. 请各位赐教! 谢谢! | 内核里有很 ...

  9. Linux驱动开发中的中间件:设备树

    Linux设备树 设备树的产生是为了解决内核源码的arch/arm目录下代码混乱和臃肿的问题(过去每个厂商出个板子就要提供外设硬件和平台硬件信息,这些信息以.c和.h文件的形式呈现).在使用设备树之后 ...

最新文章

  1. leetcode算法题--摆动序列★
  2. C语言实现一种简单的应用服务器内部数据结构的思路(三)
  3. linux unbuntu屏幕显示不完整,解决 NetBeans 在 Gnome3 显示不全的问题
  4. Qt之QTemporaryDir用法(创建临时目录)
  5. MapReduce之OutputFormat理解
  6. python复制文件夹不阻塞_Python线程,线程不阻塞
  7. HBase 源码解析
  8. JavaScript实现大数据(条形统计图表)
  9. 缓冲区溢出实例(一)--Windows
  10. PS调色类插件哪家强
  11. php 随机字符串函数,PHP 生成随机字符串的方法函数
  12. 简单有一定效果的条纹噪声消除算法
  13. html中写模态框,Html 模态框操作
  14. 向下取整符号_22. 为什么 Python 中的整除是向下取整?
  15. manjaro-安装idea
  16. 微信开发者工具更换存储目录将C盘数据User Data迁移到D盘
  17. vscode中嵌入cppcheck进行静态检查,包含插件使用方法
  18. 学 Flutter 不理解 Widget/Element/Render 三棵树?啥也不是!
  19. 网络协议 -- 最全的网络协议图
  20. Datawhale学习笔记-飞桨AI-Task02:头脑风暴:让人拍案叫绝的创意是如何产生的?

热门文章

  1. 第四章、网络安全之破解windows7密码
  2. Leaflet学习之路五——动态绘制图形(点、线、圆、多边形)
  3. C/C++跨平台的的预编译宏
  4. 户外电源连接解决方案——同为(TOWE)五孔明装工业防水插座
  5. iOS-方形图片设置成圆形图片
  6. 西电计算机导论名师,西电周佳社、王泉两名教授被评为省级教学名师
  7. 官方最新版 沙盘Sanbox[Sanboxd]下载 官方中文版 稳定版
  8. 我收藏的罗永浩语录MP3(老罗语录)
  9. EC20 4G 模块里GPS 0183协议里有GGA、GLL、GSA、GSV、RMC、VTG,
  10. 雷诺又回来了 雷诺江铃D180能否打开中国市场