linux内核模块的参数传递

60 篇文章 11 订阅
31 篇文章 0 订阅

模块安装时候可以给模块中的变量传递数值,安装后,模块中变量的值就是安装时所传入的值 ,没有传递的变量,则使用代码中默认值。

带参数的模块安装后会生成目录:
/sys/module/模块名/parameters/
示例:如果安装 了名字为  hello_model_param 的模块,则会生成
/sys/module/hello_model_param/parameters/

这个文件夹下会生成以参数为名字文件,其内容就是参数的值。可以使用cat 或echo操作这个文件,修改变量的值,但是一般情况下都不建议修改,所以这个权限的值一般设置只读的。

模块中如果变量要通过安装时传参数覆盖默认值,则需要使用以下宏修饰:
module_param,module_param_array

说明:
对于非数组类型变量使用module_param,语法:
module_param(变量名,变量类型,变量的访问权限)  //变量的访问权限:变量会文件系统以一个文件形式呈现,这个文件权限属性就是“变量的访问权限”
变量传递参数:insmod xx.ko 变量名=值

对于数组类型变量使用 module_param_array , 语法:
module_param_array(数组名,数组元素类型,&num,变量的访问权限) //num 是一个 char ,int,long 或uchar,uint,ulong类型的变量,用于保存传递给数组的元素个数。

数组传递参数: insmod xx.ko 数组名=元素0,元素1,元素2,  ……


基本类型有:
bool   :布尔类型
invbool:颠倒了值的bool类型;
charp  :字符指针类型,内存为用户提供的字符串分配;(char *)
int    :整型
long   :长整型
short  :短整型
uint   :无符号整型(unsigned int)
ulong  :无符号长整型(unsigned long)
ushort :无符号短整型(unsigned short)

指针类只能char*,对应名字 charp .

访问权限:
modlue_param 和 module_param_array 中的 perm 用于设定该参数的访问权限;
perm 表示该参数在 sysfs 文件系统中所对应的文件节点的属性;你用该使用<linux/stat.h>中定义的权限值;这
个值控制谁可以存取这些模块参数在 sysfs 文件系统中的表示;当 perm 为 0 时,表示此参数不存在 sysfs 文件
系统下对应的文件节点;否则,模块被加载后,会出现 /sys/module/模块名/parameters/参数名 这类文件 ,带
有给定的权限;
比如:
#define S_IRWXU 00700
#define S_IRUSR 00400
#define S_IWUSR 00200
#define S_IXUSR 00100
#define S_IRWXG 00070
#define S_IRGRP 00040
#define S_IWGRP 00020
#define S_IXGRP 00010
#define S_IRWXO 00007
#define S_IROTH 00004
#define S_IWOTH 00002
#define S_IXOTH 00001
注意:如果一个参数被 sysfs 修改了,那么你的模块看到的参数值也被修改了,但是你的模块不会收到任何通知;
你应当不要使模块参数可写,除非你准备好检测这个改变并因而作出反应;
 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值