linux 核心模組程式結構:
(1)模組載入函式
(2)模組解除安裝函式
(3)模組許可證宣告
(4)模組引數
(5)模組匯出符號
(6)模組作者等資訊宣告
模組載入函式
一般以 __init 標識
在 linux 中,所有標識為 __init 的函式如果直接編譯進核心,成為核心映象的一部分,在連線的時候都會放在 .init.text 這個區段內。
所有的 __init 函式在區段 .initcall.init中還儲存了乙份函式指標,在初始化時核心會通過這些函式指標呼叫這些 __init 函式,並在初始化完成後,釋放 init 段(包括.init.text、.initcall.init等)的記憶體。
模組解除安裝函式
模組解除安裝函式一般以__exit標識宣告。
模組引數
以"module_param(引數名,引數型別,引數讀/寫許可權)"為模組定義乙個引數。
匯出符號
linux的「/proc/kallsyms」檔案對應著核心符號表,它記錄了符號以及符號所在的記憶體位址。
模組可以使用如下巨集匯出符號到核心符號表中:
export_symbol(符號名);
export_symbol_gpl(符號名);
匯出的符號可以被其他模組使用,只需使用前宣告一下即可。
模組的宣告與描述
module_author:模組的作者
module_description:模組的描述
module_version:模組的版本
module_device_table:模組所支援的裝置表
module_alias:模組的別名
模組的使用計數
linux2.6以後的核心為不同型別的裝置定義了struct module *owner域,用來指向管理此裝置的模組。
當開始使用摸個裝置時,核心使用try_module_get(dev->owner)去增加管理此裝置的owner模組的使用計數;當不再使用此裝置時,核心使用module_put(dev->owner)減少對管理此裝置的管理模組的使用計數
模組編譯
新增exera_cflags = -g -o0,可以得到包含除錯資訊的hello.ko 模組。
模組總結
解除安裝模組:rmmod
檢視模組:lsmod -> 該命令實際上是讀取並分析「/proc/modules」檔案,可以使用cat命令檢視該檔案
獲得模組的資訊:modinfo
Linux核心模組
核心模組 在整個啟動的過程中,是否能成功的驅動我們主句的硬體裝置,是核心完成的工作,而核心一般都是壓縮文件,在使用之前核心之前必須要將核心減壓到的記憶體中。為了應對日新月異的硬體,目前核心都具有可讀取模組化驅動程式的功能,也就是所謂的 modules模組化 所謂模組化。核心與核心模組放在 核心 bo...
Linux核心模組
1 核心模組註冊登出 塊載入函式有返回值,模組解除安裝函式無返回值。兩者都是無參函式,載入函式用 init修飾,解除安裝函式用 exit修飾。define init attribute section init.text define exit atrribute section exit,text...
linux核心模組
綜述 如今linux核心整體框架十分龐大,我們如果直接把所有所需的功能編譯進核心,會導致核心十分龐大,且在現有核心中我們無法對其增減。所以linux提供一種機制 模組。我們可以根據需要,對模組進行刪減。一 乙個linux核心模組主要由如下幾個部分組成 1 模組載入函式 當通過insmod或者modp...