1. 程式人生 > >Linux核心模組程式設計

Linux核心模組程式設計

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核心模組程式設計第一部分結束。