Linux驱动代码中MODULE_PARM_DESC的作用

本文详细介绍了MODULE_PARM_DESC在Linux驱动模块中的功能,它用于描述驱动参数的信息,帮助用户了解如何加载驱动时传递参数。通过实例展示了如何使用MODULE_PARM_DESC和module_param设置模块参数,并通过modinfo命令查看参数描述。加入参数描述信息有助于提高驱动的易用性和文档化。
摘要由CSDN通过智能技术生成

结论

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这一行参数显示了出来。

那为什么要对模块的参数加入描述信息呢?

是为了让用户知道要加载这个驱动可以传入哪些参数,其中包括参数类型,名称等。

 


  • 9
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值