Linux module 程式設計

JUAN425發表於2014-08-15

開啟Linux terminal(CTRL + ALT + T).

建立一個module 目錄(directory):

makdir modules
這樣我們建立了一個名為modules 的目錄。

切換到該目錄下:

cd modules
這樣我們當前的工作空間就在這個modules目錄下。

我們使用ls 指令檢視該目錄下面的檔案。 當然此時是空的

ls

此時建立檔案hello.c, 如下:

vim hello.c
此時目錄modules 下面就有了一個hello.c 檔案。 此時編輯該檔案內容如下:

#include <linux/init.h> 
#include <linux/module.h>

stactic void hello_init(void) {
    printk(KERN_ALERT "Test:: Hello world \n")
    return 0;
}

static void hello_exit(void) {
    printk(KERN_ALERT  "Test:: Good bye");
}

module_init(hello_init);
module_exit(hello_exit);



:wq儲存, 回到terminal。 

上述程式的分析,。

#include <linux/init.h> 這個包含標頭檔案用於對Linux module初始化的, 同時當執行結束的時候, 釋放記憶體用的。

#include <linux/module.h> 這個包含標頭檔案用於識別這是一個module。  所有的模組都有這個標頭檔案, 必須包含進來。

注意所有的函式必須是static, 因為我們只希望擁有一份(ONLY one instance)這個函式的記憶體。 不管呼叫多少次 , 都只有一個。

Linux module程式設計的時候, 我們不可以使用c語言的標準庫。  例如列印應printk() 函式。 輸出到log file 中區。

函式module_init()cleanup_exit()是模組程式設計中最基本也是必須的兩個函式。
module_init()向核心註冊模組所提供的新功能,
cleanup_exit()登出由模組提供的所有功能。



現在我們需要將上述的原始檔編譯成一個module。 下面我們製作makefie, 方法如下:

vim makefile

忽略如何製作。 

編寫完makefile 之後, 儲存, 返回到terminal。 可以用ls 檢視此時modules中有三個檔案。

接下來, 直接輸入指令:

make

即可完成對模組的編譯工作。

接下來, 將module插入到kernel中的指令如下:

insmod hello.ko

接下來: display message. 

dmsg
會顯示Test:: Hello world。


接下來, 我們從kernel 中刪除module, 指令如下:

rmmod  hello.ko


顯示的資訊為:

Test:: Good bye







相關文章