LDD3_NO.6:Module Parameters

  8. Module Parameters
    模块参数

     有些参数因系统而异,从设备号到设备操作各个方面。比如,SCSI适配器通常有控制标记命令队列的使用。参数值可以在insmod或modprobe加载模块时指定,modprobe也可以从配置文件/etc/modprobe.conf中读取参数的值。这些命令接受不同类型的值。在hello,world模块中,我们增加两个参数:一个整型howmany,一个字符串whom。模块增加了一些功能,在加载的时刻,欢迎whom不止一次,而是howmany次。这个模块可以这样加载:

      根据这样加载,hello会说“Hello,Mom”10次。

      不过在insmod修改模块参数之前,模块要使这些参数可用。参数使用module_param宏声明,这个宏定义在linux/moduleparam.h中。module_param有三个参数:变量名、类型和权限掩码(用做sysfs入口的辅助)。宏应该在任何函数之前申明。

     模块参数支持很多类型:
     bool
     invboo
     布尔型的值是true或false(对应为int类型),而invbool类型刚好相反。

     charp
     字符指针,内存为用户的字符串分配的。

     int
     long
     short
     uint
     ulong
     ushort

    数组参数,使用逗号间隔列表,申明数组参数如下:
    module_param_array(name,type,num,perm);

     name是数组也是参数的名字,type是指数组元素的类型,num是一个整型变量,perm是通常的权限值。如果数组参数在加载时设置,num被设置成元素的个数。

    若需要上面没有提及的类型,在模块代码中可以使用钩子来定义。
所有的模块参数应该有一个缺省值,insmod只在用户明确告知它的时候来回改变。modul
e_param的最后一个参数是一个权限值,只能使用<linux/stat.h>中定义的值。

 


 

     在hello.c中更改部分代码:

 

    

     make

    

     在hello.c中,arrayNum貌似没有作用,如果修改:

     static int intArray[]={1,2,3,4,5,6};
     static int arrayNum = 4;

     执行:

     insmod hello.ko  intArray=5,6,7,7,9,10

     成功,虽然arrayNum=4.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值