Linux核心模組程式設計
阿新 • • 發佈:2018-11-02
Linux核心模組程式設計
(作者:Baron_wu 禁止轉載)
首先,建立一個核心模組並插入Linux核心中。這是實驗第一部分
首先檢視當前核心模組使用情概況:lsmod
Module:模組名
Size:模組大小
Used by:這些模組在哪被使用
接下來編寫一個simple.c的程式,當載入和解除安裝核心模組時給出適當的訊息。
程式碼如下:
#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> /* This function is called when the module is loaded. */ int simple_init(void) { printk(KERN_INFO "Loading Module\n"); return 0; } /* This function is called when the module is removed. */ void simple_exit(void) { printk(KERN_INFO "Removing Module\n"); } /* Macros for registering module entry and exit points. */ module_init( simple_init ); module_exit( simple_exit ); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("Simple Module"); MODULE_AUTHOR("SGG");
Simple_list (模組入口點) 返回0代表成功 其他值代表失敗
Simple_exit(模組退出點) 無返回值
兩個函式都沒有引數
接下來兩個巨集指令是註冊模組的入口與出口
Module_init()
Module_exit()
printk()
注意入口點與出口點是如何呼叫系統函式printk的。Printk()是核心對應的printf(),輸出傳給核心載入模組,通過使用命令dmesg來檢視他的內容。Printk()允許指定優先順序標誌。它的值在包含檔案<linux/printk.h>中給出。
在這個例項中KERN_INFO是優先的。它就像被定義的一個訊號訊息。
最後三行屬於軟體許可資訊,是核心模組開發的標準格式。
Simple.c用Makefile這個檔案來進行編譯。在終端輸入make進行編譯。
Makefile檔案內容
obj-m += simple.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
編譯後將會生成多個檔案, 檔案simple.ko代表編譯後生成的核心模組。
首先在含有simple.c 和Makefile的檔案目錄下執行make命令(我的這兩個檔案在桌面上)
之後將會生成許多檔案如下所示:
== Simple.ko是生成的核心模組 ==
接下來便是載入和移除核心模組的演示了。
首先在之前生成的編譯模組的目錄中執行命令:sudo insmod simple.ko
緊接著輸入dmesg來檢視當前核心載入情況。
在最後一行可以看到載入成功的訊息。
**之後要進行的便是移除核心模組的操作。**在終端輸入命令:
sudo rmmod simple
接著檢視是否移除成功。輸入命令:
dmesg
可以看到已經成功移除。
因為核心記錄很快就會填滿 所以定期清除緩衝區是有必要的。
執行命令:
sudo dmesg -c
到此,Linux核心模組程式設計第一部分結束。