1.定義模塊參數的方法:
module_param(name, type, perm);
其中,name:表示參數的名字;
type:表示參數的類型;
perm:表示參數的訪問權限;
2. 數組類型模塊參數的定義:
用逗號間隔的列表提供的值;
聲明一個數組參數:
module_param_array(name, type, num, perm);
其中,name:表示數組的名字;
type:表示參數的類型;
num :表示數組中元素數量;
perm:表示參數的訪問權限;
3.type支持的基本類型有:
bool :布爾類型
invbool:顛倒了值的bool類型;
charp :字符指針類型,內存為用戶提供的字符串分配;
int :整型
long :長整型
short :短整型
uint :無符號整型
ulong :無符號長整型
ushort :無符號短整型
4. perm參數 設定訪問權限
modlue_param和module_param_array中的perm用於設定該參數的訪問權限;
perm表示該參數在sysfs文件系統中所對應的文件節點的屬性;你用該使用<linux/stat.h>中定義的權限值;這個值控制誰可以存取這些模塊參數在sysfs文件系統中的表示;當perm為0時,表示此參數不存在sysfs文件系統下對應的文件節點;否則,模塊被加載後,在/sys/module/目錄下將會出現以此模塊名命名的目錄,帶有給定的權限;
比如:
#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
注意:如果一個參數被sysfs修改了,那麼你的模塊看到的參數值也被修改了,但是你的模塊不會收到任何通知;你應當不要使模塊參數可寫,除非你准備好檢測這個改變並因而作出反應;
5. 也可以在insmod(裝載模塊)的時候為參數指定值,如果沒有指定則使用默認值,如下面的例子。
[cpp] view
plain copy
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是參數num的默認值。
保存為源文件hello.c, 編譯生成hello.ko , 當我們使用insmod進行載入時, 使用
insmod hello.ko num=20
則可以 cat /sys/module/hello/parameters/num ,看到為 20