01Linux驅動模組03
阿新 • • 發佈:2020-12-06
三、核心模組傳參
核心模組傳參有兩種
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型別,使用時可以type代替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 <[email protected]>"); 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")
功能:對變數的描述
引數:
@變數的名字
@對變數描述的欄位