在使用者態下程式設計可以通過main()的來傳遞命令列引數,而編寫乙個核心模組則通過module_param()
module_param巨集是linux 2.6核心中新增的,該巨集被定義在include/linux/moduleparam.h檔案中,具體定義如下:
#define module_param(name, type, perm)
module_param_named(name, name, type, perm)
其中使用了 3 個引數:要傳遞的引數變數名, 變數的資料型別, 以及訪問引數的許可權。
<<<
perm引數的作用是什麼?
最後的 module_param 欄位是乙個許可權值,表示此引數在sysfs檔案系統中所對應的檔案節點的屬性。你應當使用 中定義的值. 這個值控制誰可以訪問這些模組引數在 sysfs 中的表示.當perm為0時,表示此引數不存在 sysfs檔案系統下對應的檔案節點。 否則, 模組被載入後,在/sys/module/ 目錄下將出現以此模組名命名的目錄, 帶有給定的許可權.。
許可權在include/linux/stat.h中有定義
比如:#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
使用 s_irugo 作為引數可以被所有人讀取, 但是不能改變; s_irugo|s_iwusr 允許 root 來改變引數. 注意, 如果乙個引數被 sysfs 修改, 你的模組看到的引數值也改變了, 但是你的模組沒有任何其他的通知. 你應當不要使模組引數可寫, 除非你準備好檢測這個改變並且因而作出反應.
>>>
這個巨集定義應當放在任何函式之外, 典型地是出現在原始檔的前面.定義如:
static char *whom = "world";
static int howmany = 1;
module_param(howmany, int, s_irugo);
module_param(whom, charp, s_irugo);
模組引數支援許多態別:
bool
invbool
乙個布林型( true 或者 false)值(相關的變數應當是 int 型別). invbool 型別顛倒了值, 所以真值變成 false, 反之亦然.
charp :乙個字元指標值. 記憶體為使用者提供的字串分配, 指標因此設定.int
long
short
uint
ulong
ushort
基本的變長整型值. 以 u 開頭的是無符號值.
陣列引數, 用逗號間隔的列表提供的值, 模組載入者也支援. 宣告乙個陣列引數, 使用:
module_param_array(name,type,num,perm);
這裡 name 是你的陣列的名子(也是引數名),
type 是陣列元素的型別,
num 是乙個整型變數,
perm 是通常的許可權值.
如果陣列引數在載入時設定, num 被設定成提供的數的個數. 模組載入者拒絕比陣列能放下的多的值.測試模組,源程式hello.c內容如下:#include
#include
#include
module_init(hello_init);
module_exit(hello_exit);
編譯生成可執行檔案hello
插入:# insmod hello who="world" times=5
出現5次"hello,world!":
#(1)hello,world!
#(2)hello,world!
#(3)hello,world!
#(4)hello,world!
#(5)hello,world!
解除安裝:# rmmod hello
出現:#goodbye,world!
浮點轉整數的巨集
union luai cast define lua number2int i,d printf d n i 很神奇的巨集,可以試一下 這個巨集神奇的在正數和負數的雙精度浮點數時都可以正確工作,以四捨五入方式轉換為 32 位整數。這個數字是 1.5 2 52 小於 2 31 的數字在和這個magic...
關於巨集定義
一 巨集替換 1.巨集展開的順序 先由外層向內層檢查,直至最內層後依次向外層展開。例外 遇到 開頭的巨集就不再往內檢查,從該層開始往外展開。2.重新掃瞄和替換 在替換列表中的所有引數替換過之後,預處理器將對結果token序列重新掃瞄以便對其中的巨集再次替換。當正在替換的巨集在其替換列表中發現自身時,...
關於offsetof巨集
offsetof 巨集 這是在看書的時候遇到的,估計以後會用到,避免遺忘,先記下來吧。一般形式 define offsetof type,member size t type 0 member 說明 通過 type 0 將0位址強制轉換為type結構型別中的指標 通過 type 0 member 訪...