2010/01/28

[Driver] 新手上路

module_initmodule_exit 是特殊的核心巨集,
前者會在模組被載入核心時執行.
後者會在模組被卸載時執行.

Module 初始函式範例:
static int __init init_function_name(void)
{

//...
}
module_init(init_function_name);

__init 和 __initdev 告知 kernel 函式只用於初始期間,
在 Module 被順利載入後, 模組裝載器會丟棄初始函式,
釋放記憶體作為其他用途.
--
Kernel API 經常看到名稱開頭為雙底線 (__) 的函式,
以這種方式標記的函式,表示他們是相當低階的元件, 請小心使用.
("If you call this function, be sure you know what you are doing.")
--
modprobe 和 insmod 同樣可用來載入模組,
差別在於 modprode 會先檢查目標模組的懸置符號表,
若還有 kernel 符號表沒有的項目, 會在當時的模組搜尋路徑找尋,
若有找到則一併載入. insmod 則不會自動滿足模組相依關係.
通常直接出現 "unresolved symbols"
--
lsmod 是讀出 /proc/module 虛擬檔, 並以 Human Readable 呈現.

沒有留言:

張貼留言