Linux内核允许在加载Linux模块的时候向模块传递参数,例如:
insmod module.ko param=2//向module模块的param参数值出入2
Linux内核模块的参数必须先声明
module_param(name,type,perm)
name: 参数的名字。
type: 参数的类型,可取(char、int、short、long、charp等类型,但没有float类型,应为内核不能很好的支持浮点型)。
perm:参数的读写权限。
perm字段是一个权限值,你应当使用<linux/stat.h>中定义的值。这个值控制谁可以存取模块参数在sysfs
中的表示,如果perm设置成0,就根本没有sysfs选项。否则,它出现在/sys/module下面,带有给定的权限。
使用S_IRUGO作为参数可以被所有人读取,但不能修改;S_IRUGO|S_IWUSR允许root来修改参数,注意
如果一个参数被sysfs修改,对应的模块看到的参数值也跟着改变了,但模块没有任何其他的通知。通常不
要允许模块参数可写,除非你准备好检测这个改变并作出相应的反应。引用自百度百科(点击打开链接)。
下面是一个简单的带参数模块的例子:
#include<linux/init.h>
#include<linux/module.h>
static int a = 0;
static char*p=NULL;
module_param(a,int,S_IRUGO);
module_param(p,charp,S_IRUGO);
static int param_module_init(void)
{
printk("a=%d p=%s\r\n",a,p);
return 0;
}
static void param_module_exit(void)
{
printk("module exit\r\n");
}
module_init(param_module_init);
module_exit(param_module_exit);
MODULE_LICENSE("GPL");
这个模块定义了两个参数 int型的a和charp型的p并在模块加载函数中把参数值输出,假设编译后的模块得到param.ko文件,则可以通过以下形式向模块的a和p参数传值
insmod param.ko a=2 p=abcd