1. 模塊參數
用 “module_param (參數名,參數類型,參數讀 / 寫權限) ” 為模塊定義一個參數,例如下列代碼定義了 1 個整型參數和 1 個字符指針參數:
1 static char *book_name = "dissecting Linux Device Driver"; 2 module_param(book_name, charp, S_IRUGO); 3 static int book_num = 4000; 4 module_param(book_num, int, S_IRUGO);
在裝載內核模塊時,用戶可以向模塊傳遞參數,形式為 “insmode 模塊名 參數名 = 參數值,如果不傳遞,參數將使用模塊內定義的缺省值。參數類型可以是 byte 、 short 、 ushort 、 int 、 uint 、 long 、 ulong 、 charp (字符指針)、 bool 或 invbool (布爾的反),在模塊被編譯時會將 module_param 中聲明的類型與變量定義的類型進行比較,判斷是否一致。模塊被加載后,在 /sys/module/ 目錄下將出現以此模塊名命名的目錄。在此模塊的目錄下還將出現 parameters 目錄,其中包含一系列以參數名命名的文件節點,這些文件的權限值就是傳入module_param ()的 “參數讀 / 寫權限” ,而文件的內容為參數的值。
insmod命令加載模塊后,通過查看 “/var/log/messages” 日志文件可以看到內核的輸出:
# tail -n 2 /var/log/messages
tail -n 2表示輸入文件的最后2行
2. 導出符號
Linux 的 “/proc/kallsyms” 文件對應着內核符號表,它記錄了符號以及符號所在的內存地址。模塊可以使用如下宏導出符號到內核符號表中:
EXPORT_SYMBOL( 符號名 ); EXPORT_SYMBOL_GPL( 符號名 );
導出的符號可以被其他模塊使用,只需使用前聲明一下即可。 EXPORT_SYMBOL_GPL ()只適用於包含 GPL許可權的模塊。
如果符號名是“e_symbol”,從 “/proc/kallsyms” 文件中找出 e_symbol 的相關信息:
# grep e_symbol /proc/kallsyms
8000af1c t e_symbol [export_symb]