Linux 核心模組

2021-08-14 09:02:38 字數 1235 閱讀 6073

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...