1.定義模塊參數(shù)的方法:
module_param(name, type, perm);
其中,name:表示參數(shù)的名字;
type:表示參數(shù)的類型;
perm:表示參數(shù)的訪問權(quán)限;
2. 數(shù)組類型模塊參數(shù)的定義:
用逗號(hào)間隔的列表提供的值;
聲明一個(gè)數(shù)組參數(shù):
module_param_array(name, type, num, perm);
其中,name:表示數(shù)組的名字;
type:表示參數(shù)的類型;
num :表示數(shù)組中元素?cái)?shù)量;
perm:表示參數(shù)的訪問權(quán)限;
3.type支持的基本類型有:
bool :布爾類型
invbool:顛倒了值的bool類型;
charp :字符指針類型,內(nèi)存為用戶提供的字符串分配;
int :整型
long :長整型
short :短整型
uint :無符號(hào)整型
ulong :無符號(hào)長整型
ushort :無符號(hào)短整型
4. perm參數(shù) 設(shè)定訪問權(quán)限
modlue_param和module_param_array中的perm用于設(shè)定該參數(shù)的訪問權(quán)限;
perm表示該參數(shù)在sysfs文件系統(tǒng)中所對(duì)應(yīng)的文件節(jié)點(diǎn)的屬性;你用該使用<linux/stat.h>中定義的權(quán)限值;這個(gè)值控制誰可以存取這些模塊參數(shù)在sysfs文件系統(tǒng)中的表示;當(dāng)perm為0時(shí),表示此參數(shù)不存在sysfs文件系統(tǒng)下對(duì)應(yīng)的文件節(jié)點(diǎn);否則,模塊被加載后,在/sys/module/目錄下將會(huì)出現(xiàn)以此模塊名命名的目錄,帶有給定的權(quán)限;
比如:
#define S_IRWXU 00700
#define S_IRUSR 00400
#define S_IWUSR 00200
#define S_IXUSR 00100
#define S_IRWXG 00070
#define S_IRGRP 00040
#define S_IWGRP 00020
#define S_IXGRP 00010
#define S_IRWXO 00007
#define S_IROTH 00004
#define S_IWOTH 00002
#define S_IXOTH 00001
注意:如果一個(gè)參數(shù)被sysfs修改了,那么你的模塊看到的參數(shù)值也被修改了,但是你的模塊不會(huì)收到任何通知;你應(yīng)當(dāng)不要使模塊參數(shù)可寫,除非你準(zhǔn)備好檢測(cè)這個(gè)改變并因而作出反應(yīng);
5. 也可以在insmod(裝載模塊)的時(shí)候?yàn)閰?shù)指定值,如果沒有指定則使用默認(rèn)值,如下面的例子。
- MODULE_LICENSE("Dual BSD/GPL");
- static int num=10;
- module_param(num,int,S_IRUGO);
- static int hello_init(void)
- {
- printk("Hello module init./n");
- printk("num=%d/n",num);
- return 0;
- }
- static void hello_exit(void)
- {
- printk("Goodbye module exit./n");
- }
- module_init(hello_init);
- module_exit(hello_exit);
- MODULE_DESCRIPTION("a simple module");
- MODULE_ALIAS("hello");
上面的num=10,則10是參數(shù)num的默認(rèn)值。
保存為源文件hello.c, 編譯生成hello.ko , 當(dāng)我們使用insmod進(jìn)行載入時(shí), 使用
insmod hello.ko num=20
則可以 cat /sys/module/hello/parameters/num ,看到為 20