模块支持参数的方法
内核允许驱动程序指定参数,这些参数可在运行insmod或者modprobe命令装载模块时赋值,modprobe还可以从它的配置文件(/etc/modporb.conf)中读取参数值;
insmod加载模块时指定参数的方式如下:
1 insmod hellop howmany=10 whom="Mom"
在模块文件中,需要定义参数:
1 static char *whom = "world"; 2 static int howmany = 1; 3 module_param(howmany, int, S_IRUGO); 4 module_param(whom, charp, S_IRUGO);
内核支持的模块参数类型如下
bool && invbool 布尔值,invbool类型对值进行反转,true变为false,false变为true;
int long short uint ulong ushort 具有不同长度的基本类型值;u开头表示无符号值;
1 module_param_array(name,type,perm);
name-参数名称;
type-元素的类型;
perm-访问许可;
模块装载器也支持数组参数,提供数组值时用逗号划分各个数组成员,需要使用的宏如下:
1 module_param_array(name,type,num,perm);
name-数组名称,也就是参数名称;
type-数组元素的类型;
num-数组元素的个数;
perm-访问许可;
关于perm
module_param的最后一个成员是访问许可值,我们应使用<linux/stat.h>中存在的定义指定该值,这个值用来控制谁能够访问sysfs中对模块参数的表述。如果pem被设置为0,就不会有对应的访问许可。如果对参数使用S_IRUGO,则任何人都可以读取该参数,但不能修改;S_IRUGO|S_IWUSR允许root用户修改该参数。注意,如果一个参数通过sysfs被修改,则如果模块修改了这个参数值一样,但是内核不会以任何方式通知模块。大多数情况下,我们不应让模块参数可写,除非我们打算检测这种修改并作出动作;