結構體struct module在核心中代表乙個核心模組,通過insmod(實際執行init_module系統呼叫)把自己編寫的核心模組插入核心時,模組便與乙個 struct module結構體相關聯,並成為核心的一部分。下面是結構體struct module的完整定義,接下來會逐個解釋:
struct module
;
我們插入乙個核心模組,一般會使用工具insmod,該工具實際上呼叫了系統呼叫init_module,在該系統呼叫函式中,首先呼叫 load_module,把使用者空間傳入的整個核心模組檔案建立成乙個核心模組,返回乙個struct module結構體。核心中便以這個結構體代表這個核心模組。
state是模組當前的狀態。它是乙個列舉型變數,可取的值為:module_state_live,module_state_coming,module_state_going。分別表示模組當前正常使用中(存活狀態),模組當前正在被載入,模組當前正在被解除安裝。load_module函式中完成模組的部分建立工作後,把狀態置為module_state_coming,sys_init_module函式中完成模組的全部初始化工作後(包括把模組加入全域性的模組列表,呼叫模組本身的初始化函式),把模組狀態置為module_state_live,最後,使用rmmod工具解除安裝模組時,會呼叫系統呼叫delete_module,會把模組的狀態置為module_state_going。這是模組內部維護的乙個狀態。
list是作為乙個列表的成員,所有的核心模組都被維護在乙個全域性鍊錶中,煉表頭是乙個全域性變數struct module *modules。任何乙個新建立的模組,都會被加入到這個鍊錶的頭部,通過modules->next即可引用到。
name是模組的名字,一般會拿模組檔案的檔名作為模組名。它是這個模組的乙個標識。
另外,還要介紹一下巨集this_module,它的定義如下是#define this_module (&__this_module),__this_module是乙個struct module變數,代表當前模組,跟current有幾分相似。可以通過this_module巨集來引用模組的struct module結構,試試下面的模組:
#include module_license("dual bsd/gpl");
static int hello_init(void)
static void hello_exit(void)
module_init(hello_init);
module_exit(hello_exit);
以下均針對於核心2.6.18
在module.h 中 this_module的定義如下:
extern struct module __this_module;
#define this_module (&__this_module)
即是儲存了__this_module這個物件的位址,那這個__this_module在**定義呢?這就要從module的編譯說起啦,如果編譯過模組就會發現,會生成*.mod.c這樣的乙個檔案,開啟這個檔案,就會發現,類似下面的定義:
struct module __this_module
__attribute__((section(".gnu.linkonce.this_module"))) = ;
這個檔案是呼叫modpost生成的,modpost的main中有這樣一段**:
for (mod = modules; mod; mod = mod->next)
其中的add_header就偷偷新增了__this_module 的定義
static void add_header(struct buffer *b, struct module *mod)
;\n");
}
Linux核心 了解Linux核心搶占
目錄 無強制搶占 可搶占核心 自願核心搶占 完全實時搶占 在配置linux核心時,我們可以設定一些影響系統行為的引數。您可以使用不同的優先順序,排程類和搶占模型。了解並選擇正確的引數非常重要。在這篇文章中,我將介紹不同的搶占模型,以及每種模型如何影響使用者和核心行為 如果配置核心 使用make me...
Linux 核心 vs Windows 核心
windows 和 linux 可以說是我們比較常見的兩款作業系統的。windows 基本占領了電腦時代的市場,商業上取得了很大成功,但是它並不開源,所以要想接觸原始碼得加入 windows 的開發團隊中。這兩個作業系統各有千秋,不分伯仲。作業系統核心的東西就是核心,這次我們就來看看,linux 核...
Linux 核心 vs Windows 核心
作者丨小林coding windows 和 linux 可以說是我們比較常見的兩款作業系統的。windows 基本占領了電腦時代的市場,商業上取得了很大成功,但是它並不開源,所以要想接觸原始碼得加入 windows 的開發團隊中。這兩個作業系統各有千秋,不分伯仲。作業系統核心的東西就是核心,這次我們...