linux內核之模塊參數及導出符號


1. 模塊參數

module_param (參數名,參數類型,參數讀 / 寫權限) ” 為模塊定義一個參數,例如下列代碼定義了 個整型參數和 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]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM