热爱开源,热爱linux
分类: LINUX
2010-05-05 21:10:31
在用户态下编程可以通过main()的来传递命令行参数,而编写一个内核模块则通过module_param()
module_param宏是Linux 2.6内核中新增的,该宏被定义在include/linux/moduleparam.h文件中,具体定义如下:
#define module_param(name, type, perm)
module_param_named(name, name, type, perm)
其中使用了 3 个参数:要传递的参数变量名, 变量的数据类型, 以及访问参数的权限。
<<<
perm参数的作用是什么?
最后的 module_param
字段是一个权限值,表示此参数在sysfs文件系统中所对应的文件节点的属性。你应当使用
权限在include/linux
/stat.h中有定义
比如:
#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
使用 S_IRUGO 作为参数可以被所有人读取, 但是不能改变; S_IRUGO|S_IWUSR
允许 root 来改变参数. 注意, 如果一个参数被 sysfs 修改, 你的模块看到的参数值也改变了, 但是你的模块没有任何其他的通知.
你应当不要使模块参数可写, 除非你准备好检测这个改变并且因而作出反应.
>>>
这个宏定义应当放在任何函数之外, 典型地是出现在源文件的前面.定义如:
static char *whom = "world";
static int howmany =
1;
module_param(howmany, int, S_IRUGO);
module_param(whom, charp,
S_IRUGO);
模块参数支持许多类型: