linux驱动——传递参数给驱动

  

1需要办的头文件

头文件在“包括/linux/moduleparam.h”

2函数说明

2.1内核模块可以通过module_param来传单个参数

- module_param(名称、类型烫)
-名称:模块参数的名称
-类型:模块参数的数据类型(支持int长的短使用uint ulong ushort类
型)
-烫:模块参数的访问权限(S_IRUSR参数表示所有文件所有者
可读)

2.2传递多个参数module_param_array(名称、类型、nump烫)

-名称:模块参数的名称
-类型:模块参数的数据类型(支持int长的短使用uint ulong ushort类
型)
- nump:保存参数个数的地址
-烫:模块参数的访问权限(S_IRUSR参数表示所有文件所有者
可读)

2.3参数的访问权限

参数烫表示此参数在sysfs文件系统中所对应的文件节点的属性,其权限在
包括/linux/stat.h中有定义。
?变量烫
- # defineS_IRUSR 00400文件所有者可读
- # defineS_IWUSR00200文件所有者可写
- # defineS_IXUSR 00100文件所有者可执行
- # defineS_IRGRP00040与文件所有者同组的用户可读
- # defineS_IWGRP00020
- # defineS_IXGRP 00010
# defineS_IROTH 00004与文件所有者不同组的用户可读
- # defineS_IWOTH00002
- # defineS_IXOTH 00001
?将数字最后三位转化为二进制:xxx xxx xxx,高位往低位依次看,第一位为1表示文
件所有者可读,第二位为1表示文件所有者可写,第三位为1表示文件所有者可执
行;接下来三位表示文件所有者同组成员的权限;再下来三位为不同组用户权限

3用法源码举例

*定义module_param  module_param_array的头文件*/# include  & lt; linux/moduleparam.h>/*定义module_param  module_param_array中烫的头文件*/# include  & lt; linux/stat.h> MODULE_LICENSE (“Dual  BSD/GPL");/*声明是开源的,没有内核版本限制*/MODULE_AUTHOR (“iTOPEET_dz");/*声明作者*/static  int  module_arg1, module_arg2; static  int  int_array [50]; static  int  int_num;      module_param (int, module_arg1 S_IRUSR);      module_param (int, module_arg2 S_IRUSR);      module_param_array (int_array、int和int_num S_IRUSR); static  int  hello_init (void) {,,, int 我;   ,,,,   ,,,printk (KERN_EMERG “module_arg1  is  % d ! \ n", module_arg1);   ,,,printk (KERN_EMERG “module_arg2  is  % d ! \ n", module_arg2),,,,,   ,,,(i=0; i< int_num;我+ +){   ,,,,,,,printk (KERN_EMERG “int_array [% d], is  % d ! \ n",我,int_array[我]);   ,,,}   ,,,,,,,   ,,,printk (KERN_EMERG “Hello  World 输入! \ n"),,,,,/*打印信息,KERN_EMERG表示紧急信息*/,,,return  0;   }

4传递参数的命令

insmod/mnt/udisk/module_param。ko module_arg1=10 module_arg2=20
int_array=11日12日13日,14日,15日,16日,17日,18日

猫/sys/模块/module_param/参数/xxx可以查询参数

linux驱动——传递参数给驱动