MODULE_PARM包含两个参数,一个是module名称,一个是数据类型,比如"h":短整型,"i":整型,"l":长整型,"s":字符串。如果是"a-bi"这样的,就表示至少占据a个整型存储单元而至多占据b个。
在传递字符串型的参数时,这个全局变量需要在模块中用Char *来声明!insmod会自动为其分配内存空间.
例如:
int a = 3;
char *st;
MODULE_PARM(a,”i”);
MODULE_PARM(st,”s”);
在insmod是我们加这样的参数:
insmode a.o “a = 3″, “st = hello world”
这里最重要的是,MODULE_PARM()也支持我们最常用的数组类型.用短线’-'把两个数字分开,分别表示数组参数中的最小位数和最大位数.例如:
int array[8];
MODULE_PARM(array,”1-8i”);
在命令行我们使用加这样的参数:
insmod a.o “array = 38745,123,4000″
在加载模块编程时,我们往往给这些全局变量以默认值,如果我们insmod时没有传入参数时,模块会使用这些默认值,而如果我们传入参数时,这些默认值便被覆盖掉.
在改成module_param的时候,如果对应的变量是单个就用module_param,如果是一个数组就用module_param_array;module_param有三个参数:module名称、数据类型和在sysfs中的权限,最后一个一般没有特殊要求的话可以直接写0。module_param_array多一个参数,可以通过一个指向某个整型变量的指针来存储事实上的数据尺寸。没有这个需求的话,把那个指针用作NULL就可以了。
阅读(1880) | 评论(0) | 转发(0) |