#include module_license("gpl");
static int __init hellow_init(void)
static void __exit hellow_exit(void)
module_init(hellow_init);
module_exit(hellow_exit);
在我們執行insmod module_name的時候系統實際上呼叫的是init_module,在init_module中呼叫load_module然後將使用者傳入的核心檔案建立為一整個核心模組,返回乙個module結構體,系統即以此表示嵌入的模組
struct module
state是乙個列舉型變數,代表模組的狀態
enum module_state
;
例如我們上面的程式執行之後得到的結果就是
#insmod by_module_test.ko
this module: bf000420 == bf000420
module state: 1
module name : by_module_test
module name : by_module_test
#rmmod by_module_test
module state: 2
其中module state分別就會對應上面列舉變數的後兩個
extern struct module __this_module;
#define this_module (&__this_module)
這兩句就將
__this_module的位址巨集定義給
this_module,所以執行結果會出現
this module: bf000420 == bf000420
也就是在進行module初始化的時候,系統會分配乙個區域性的module結構體,然後對應當前的模組資訊進行填充,之後放入鍊錶中去,此時this_module就代表了當前被載入的模組的資訊
list_for_each_entry(mod, *(&this_module->list.prev), list)
printk("module name: %s\n", mod->name);
this_module->list.prev會將當前已經載入的模組位址遞交給
mod,由於當前只有乙個模組,所以只有乙個顯示專案,但是如果之前載入過部分模組,則執行此模組載入的時候會將全部之前載入過的模組名稱給顯示出來,如果加上
state選項進行顯示就會看到之前載入上去的模組為0,也就是已載入狀態
使用rmmod的時候,系統就會呼叫
delete_module來進行模組的刪除,同時置
state位為
going模式,也就是正在解除安裝。
對應執行結果中的
module state: 2
this的一點見解
執行環境 execution context,有時也成為上下文,有時也稱為 環境 執行環境定義了變數和函式有權訪問那些資料,決定各自的行為。全域性執行環境是最外圍的執行環境。全域性執行環境一直都存在。宿主環境不同執行環境也不同。每乙個環境都有乙個執行環境。當執行流進入乙個函式時,函式的環境就會被推入...
字元編碼的一點見解
utf 8 型別為可變長型別,但是utf 8和unicode轉換無需查表,他們的有用資訊部分是完全一致的,轉換規則如下 utf 8 0000 007f 0 x 0080 07ff 110 xx 10 0800 ffff 1110 x 10 10 可見它是根據數值的大小來做長度區分的 1.小於7f 1...
對工作的一點見解
黨務文字秘書主要負責起草黨委的稿子報告 計畫總結 綜合性重要檔案 綜合性重要文稿等。但是,這個崗位絕不僅僅是處理文字工作那麼簡單,他又是黨委書記的 參謀助手 是上情下達 下情上傳 承上啟下的重要環節,要做好秘書工作,不斷提高為領導服務的質量和水平,對各方面的素質都提出了很高的要求,對我們政治上 思想...