linux driver module之传参

我们要给驱动模块传参数,想必大家都很清楚,应该使用module_param()函数。近期看代码突然有个疑问,给driver传多个相同类型的参数,驱动时如何接收的呢?

insmod xxx.ko param //这种命令行中的参数又是如何与驱动中的module_param()中的参数匹配的呢?

今天我们就探讨一下module_param()与脚本中的命令参数的匹配规则

带着问题,我们实现如下代码进行验证:

源文件:

multi_params.c

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>

unsigned long param1 = 0;
unsigned long param2 = 0;

module_param(param1, ulong, 0644);
module_param(param2, ulong, 0644);

static int __init multi_params_test_init()
{
    printk("param1: %l, param2: %l", param1, param2);
}

static void __exit multi_param_test_exit()
{

}

module_init(multi_params_test_init);
module_exit(multi_params_test_exit);

MODULE_LICENSE("GPL")

Makefile

objs-m := multi_params.o
module-objs := multi_params.o

KDIR := /lib/module/$(shell uname -r)/build/

default:
    $(MAKE) -C $(KDIR) M=$(shell pwd) modules
clean:
    rm -rf *.o
    rm -rf *.order
    rm -rf *.mod
    rm -rf *.symvers

做如下试验:

insmod a=10 b=20 //报:Unknown symbol in module,可知在driver中无法找到对应的symbol

insmod param1=10 param2=20 //可以正常insmod了,通过cat /sys/module/multi_params/parameters/param1 可知param1 = 10, param2 = 20  

insmod param2=10 param1=20 //  使用这种方式验证,可以得到param1=20 param2=10

因此,根据上述的实验,我们可以得到一个结论,module_param()与脚本中的命令参数的匹配规则是,通过参数的名字进行匹配的

                                                                                                                                                                                                                                         

                                                                                                                                                                                                                                                  2020-04-20

                                                                                                                                                                                                                                                       小石头  于济南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值