三、内核模块传参
内核模块传参有两种
1、在安装驱动的时候传递参数
2、在驱动运行的时候传递参数
1、在安装驱动的时候传递参数
insmod xxx.ko a=12 b=35
驱动模块中使用的变量的类型
vim include/linux/moduleparam.h +97
变量类型 字节大小
bool 布尔类型 a bool, values 0/1, y/n, Y/N.
invbool 反布尔类型 the above, only sense-reversed (N = true).
byte 1个字节
short 2个字节
ushort 2个字节
int 4个字节
uint 4个字节
long 4个字节
ulong 4个字节
charp 字符指针类型 a character pointer
内核中没有字符类型(char),但有byte类型,使用时可以byte类型代替char类型,
但是在传递参数时不能直接传递字符,只能传递整形数,否则会报错
模块编写
1 #include <linux/init.h>
2 #include <linux/module.h>
3 #define N 10
4
5 char a = 100; //字符类型
6 int b = 55; //整型
7 int c[N]; //整型数组
8 int len; //数组长度
9 char *d = "aaccdd"; //字符指针
10
11 //char
12 module_param(a,byte,0775);
13 MODULE_PARM_DESC(a,"this is char type");
14
15 //int
16 module_param(b,int ,0775);
17 MODULE_PARM_DESC(b,"this is int type");
18
19 //array
20 module_param_array(c,int,&len,0775);
21 MODULE_PARM_DESC(c,"this is int array type");
22
23 //charp
24 module_param(d,charp,0775);
25 MODULE_PARM_DESC(d,"this is charp type");
26
27 void mydata(void){
28 int i;
29 //char
30 printk("a = %c\n",a);
31 printk("a = %d\n",a);
32
33 //int
34 printk("b = %d\n",b);
35
36 //array
37 for(i=0;i<len;i++){
38 printk("c[%d] = %d\n",i,c[i]);
39 }
40
41 //charp
42 printk("d = %s\n",d);
43 }
44
45 static int __init mymodule_init(void)
46 {
47 mydata();
48 return 0;
49 }
50
51 static void __exit mymodule_exit(void)
52 {
53 mydata();
54 }
55
56 module_init(mymodule_init);
57 module_exit(mymodule_exit);
58 MODULE_LICENSE("GPL");
59 MODULE_AUTHOR("Liu Shuren <liusr705@163.com>");
60 MODULE_DESCRIPTION("this is module");
61 MODULE_ALIAS("001module");
62
模块安装时传入参数
传参:insmod xxx.ko a=115 b=66 c=1,2,3,4,5 d="https://www.cnblogs.com/liusr/"
查看:dmesg
2、在驱动运行的时候传递参数
【1】前提是驱动模块变量的@perm权限参数设置时不能设置为0
@perm:权限(0664、0775…)
其它用户(ugo(用户、组、其它)中的o(其它只能是 1 4 5))不能有写的权限,否则会报错
【2】在 /sys/module/驱动命名的目录/parameters/ 路径下会有以变量的名字命名的普通文件
【3】可以在驱动运行的时候进入 root用户下直接进行修改
echo 123 > a
echo 666>b
3、使用的宏和命令
modinfo xxx.ko 查看模块信息
module_param(name,type,perm)
功能:接收向模块中传递的参数
参数:
@name:变量名
@type:变量的类型
@perm:权限(0664、0775…)
其它用户(ugo(用户、组、其它)中的o(其它))不能有写的权限,否则会报错
module_param_array(name,type,nump,perm)
功能:用来接收数组
参数:
@name:数组的名字
@type:数组成员的类型
@nump:接收传递成员的个数(传递的时候需要对变量取地址)
@perm:权限(0664、0775…)
其它用户(ugo(用户、组、其它)中的o(其它))不能有写的权限,否则会报错
MODULE_PARM_DESC(name,"string")
功能:对变量的描述
参数:
@变量的名字
@对变量描述的字段
浙公网安备 33010602011771号