如何向模块传递参数,module

如何向模块传递参数,module,第1张

 1. 现象描述

Linux系统中,动态加载的模块往往需要实现:

1)在加载模块时,向模块传递一个参数值,且该参数值在模块运行过程中不能对其进行修改;

2)在加载模块时,向模块传递一个参数值,且该参数值在模块运行过程中根据需求对其进行动态修改。

2. 关键过程

1、Linux系统2.6内核下,可以通过宏module_param(name, type, perm)将参数name声明为模块参数,该参数值可以在加载模块时指定,否则为模块内定义的缺省值;

2、我们需要关注perm,perm表示此参数在sysfs文件系统中所对应的文件节点的属性:

1)当perm为0时,表示此参数不存在在sysfs文件系统下对应的文件节点;

2)模块被加载后,在/sys/module/目录下将出现以此模块名命名的目录;

3)如果此模块存在perm不为0的命令行参数,在此模块的目录下将出现parameters目录,包含一系列以参数命名的文件节点;

4)这些文件的权限值等于perm,文件的内容为参数的值。

3、perm有四种不同属性的模块参数:

1)可读写参数:此参数可以实时查看和动态修改其值;其属性为S_IRUGO|S_IWUSR;

2)可读参数:此参数只能实时查看,不能动态修改;其属性为S_IRUGO;

3)可写参数:此参数不能实时查看,但可以动态修改;其属性为S_IWUSR;

4)不可读写参数:此参数不能在sysfs文件系统中显示,也不能实时查看和动态修改其值;其属性值为0;

很多情况下,我们期望通过参数来控制我们的驱动的行为,比如由于系统的不同,而为了保证我们驱动有较好的移植性,我们有时候期望通过传递参数来控制我们驱动的行为,这样不同的系统中,驱动可能有不同的行为控制。

为了满足这种需求,内核允许对驱动程序指定参数,而这些参数可在加载驱动的过程中动态的改变

参数的来源主要有两个

使用insmod/modprobe ./xxx.ko时候在命令行后直接给出参数;

modprobe命令装载模块时可以从它的配置文件/etc/modprobe.conf文件中读取参数值

这个宏必须放在任何函数之外,通常实在源文件的头部

模块参数传递的方式

对于如何向模块传递参数,Linux kernel 提供了一个简单的框架。其允许驱动程序声明参数,并且用户在系统启动或模块装载时为参数指定相应值,在驱动程序里,参数的用法如同全局变量。

使用下面的宏时需要包含头文件<linux/moduleparam.h>

module_param(name, type, perm)module_param_array(name, type, num_point, perm)module_param_named(name_out, name_in, type, perm)module_param_string(name, string, len, perm)

MODULE_PARM_DESC(name, describe)

1: 查看已加载模块使用lsmod命令可以进行查看.2: modinfo功能说明:显示kernel模块的信息。

语法:modinfo [-0] [-F field] [modulename|filename ...]

modinfo -Vmodinfo -h补充说明:modinfo会显示kernel模块的对象文件,以显示该模块的相关信息。

参数:-F field 只打印指定的区域的信息。

-a 显示模块作者名称。

-d 显示模块的说明。

-l 显示模块的授权。

-n 显示模块的详细路径及名称。

-p 显示模块所支持的参数。

-h 显示帮助信息。

-V或--version 显示版本信息。

详细参考帮助信息。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/yw/8548192.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存