linux驅動--傳遞參數給驅動

1需要辦的頭文件

頭文件在“include/linux/moduleparam.h”

2函數說明

2.1 內核模塊可以通過module_param來傳單個參數

– module_param(name,type,perm)
– name:模塊參數的名稱
– type: 模塊參數的數據類型(支持int long short uint ulong ushort類
型)
– perm: 模塊參數的訪問權限(S_IRUSR參數表示所有文件所有者
可讀)

2.2傳遞多個參數module_param_array(name, type, nump, perm)

– name:模塊參數的名稱
– type: 模塊參數的數據類型(支持int long short uint ulong ushort類
型)
– nump:保存參數個數的地址
– perm: 模塊參數的訪問權限(S_IRUSR參數表示所有文件所有者
可讀)

2.3參數的訪問權限

參數perm表示此參數在sysfs文件系統中所對應的文件節點的屬性,其權限在
include/linux/stat.h中有定義。
• 變量perm
– #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 <linux/moduleparam.h>/*定義module_param module_param_array中perm的頭文件*/#include <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(module_arg1,int,S_IRUSR);

module_param(module_arg2,int,S_IRUSR);

module_param_array(int_array,int,&int_num,S_IRUSR);static int hello_init(void){    int i;
    
    printk(KERN_EMERG "module_arg1 is %d!\n",module_arg1);
    printk(KERN_EMERG "module_arg2 is %d!\n",module_arg2);    
    for(i=0;i<int_num;i++){
        printk(KERN_EMERG "int_array[%d] is %d!\n",i,int_array[i]);
    }
        
    printk(KERN_EMERG "Hello World enter!\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

cat /sys/module/module_param/parameters/xxx 可以查詢參數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章