Ubuntu編譯內核模塊,內容體現系統日志中

1.Linux登陸界面

1.檢查當前文件目錄:

通過Xshell連接Linux系統後

輸入命令:ls

在這裡插入圖片描述

2. 新建code/kernel文件夾

在這裡插入圖片描述

2.編寫代碼

1.創建hello_module.c

指令:vim hello_module.c

2.按i進入編輯模式,並輸入以下代碼

 //hello_module.c #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> ​ static int __init hello_init(void){    printk("This is hello_module, welcome to Linux kernel \n");    return 0; } ​ static void __exit hello_exit(void){    printk("see you next time!\n"); } ​ module_init(hello_init); module_exit(hello_exit); ​ MODULE_LICENSE("GPL"); MODULE_AUTHOR("Mr Q"); MODULE_DESCRIPTION("hello kernel module"); MODULE_ALIAS("hello");

在這裡插入圖片描述

以上代碼解釋如下:
(1) #include <linux/module.h>:必須。module.h 頭文件包含瞭對模塊的結構定義以及模塊的版本控制,任何模塊程序的編寫都要包含這個頭文件;
(2) #include <linux/kernel.h>:kernel.h 包含瞭常用的內核函數,如以上程序中的 printk()函數;
(3) #include <linux/init.h>:必須。init.h 包含瞭 module_init()和 module_exit()函數的聲明;
(4) module_init():必須。模塊加載函數,加載模塊式該函數自動執行,進行初始化操作;
(5) module_exit():必須。模塊卸載函數,卸載模塊時函數自動執行,進行清理操作; (6) MODULE_LICENSE():表示模塊代碼接受的軟件許可協議。Linux 內核是使用 GPL V2 的開源項目,其要求所有使用和修改瞭 Linux 內核代碼的個人或組織都有義務把修改後的源代碼公開,這是一個強制的開源協議,所以一般編寫驅動代碼都需要顯示的聲明和遵循本協議,否則內核 UI 發出被污染的警告;
(7) MODULE_AUTHOR():描述模塊的作者信息;
(8) MODULE_DESCRIPTION():簡單描述模塊的用途、功能介紹等;
(9) MODULE_ALIAS():為用戶控件提供的別名;
(10) printk():內核輸出函數,默認打印系統文件 ” /var/log/kern.log”的內容。

3. 保存退出,並觀察文件目錄
按鍵ESC;
:wq

在這裡插入圖片描述

3.編寫Makefile文件

vim Makefile

 obj-m := hello_module.o
 ​
 KERNELBUILD := /lib/modules/$(shell uname -r)/build
 CURRENT_PATH := $(shell pwd)
 ​
 all:
     make -C $(KERNELBUILD) M=$(CURRENT_PATH) modules
 ​
 clean:
         make -C $(KERNELBUILD) M=$(CURRENT_PATH) clean

以上代碼解釋如下:
(1) obj-m := <模塊名>.o:定義要生成的模塊名稱
(2) KERNELBUILD := /lib/modules/$(shell uname -r)/build : KERNELBUILD 為自定義名稱,用於指向正在運行 Linux 的內核編譯目錄,其中“uname -r”標識顯示對應的內核版本;
(3) CURRENT_PATH := $(shell pwd):CURRENT_PATH 為自定義名稱,用於指向當前當前目錄;
(4) all:編譯執行的動作
(5) clean:zhixing make clean 需要的動作。“make clean”用於清除上次的 make 命令所產生的 object 文件(後綴為“.o”的文件)及可執行文件。

:wq保存退出

4.編譯:

輸入指令:make

在這裡插入圖片描述

可以看到編譯後的文件

在這裡插入圖片描述

檢查編譯模塊

在這裡插入圖片描述

也可通過 modinfo 命令進一步檢查 :

在這裡插入圖片描述

5.插入模塊

通過 insmod 命令插入模塊,完成插入後可通過 lsmod 命令查看當前模塊是否已經被加載到系統中:

在這裡插入圖片描述

第一個就是.

系統加載模塊後,也會在“/sys/module”目錄下新建以模塊名命名的目錄 :

在這裡插入圖片描述

6.查看日志輸出

因 本 演示 中 prink()采 用 默認 輸出 等級 ,可 通 過“ dmesg” 或“ tail /var/log/kern.log”命令查看輸出結果。

在這裡插入圖片描述

到此這篇關於Ubuntu編譯內核模塊,內容體現系統日志中的文章就介紹到這瞭,更多相關buntu編譯內核模塊內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: