編譯乙個核心模組

2021-10-18 16:22:44 字數 1747 閱讀 6890

1,編寫hello.c

#include

#include

module_license

("gpl");

static

int __init hello_init

(void

)static

void __exit hello_exit

(void

)module_init

(hello_init)

;module_exit

(hello_exit)

;

2,編寫makefile檔案
kdir ?

=/lib/modules/$(shell uname -r)

/build

pwd :

= $(shell pwd)

obj-m :

= hello.o

all:

$(make)

-c $(kdir) m=$(pwd) modules

clean:

rm -rf *

.o *

~ core .depend .

*.cmd *

.ko *

.mod.c .tmp_versions *

.mod *

.order *

.symvers

3,make並安裝核心模組

接著可以使用 rmmod hello 來登出這個模組。

同時printk()的輸出在終端中是不能顯示的,需要用dmesg命令來檢視。

有乙個很方便的方法是,在另一台終端上寫乙個指令碼來監控printk()的輸出,指令碼可以這麼寫:

$while

true

>do

>sudo dmesg -c

>sleep 1

>done

如果沒有顯示,可以調整控制台日誌級別:

echo

"7"> /proc/sys/kernel/printk

啟用所有級別的日誌。具體數字所代表的意思見:

#define kern_emerg "<0>" 

/* system is unusable*/

#define kern_alert "<1>"

/* action must be taken immediately*/

#define kern_crit "<2>"

/* critical conditions*/

#define kern_err "<3>"

/* error conditions*/

#define kern_warning "<4>"

/* warning conditions*/

#define kern_notice "<5>"

/* normal but significant condition*/

#define kern_info "<6>"

/* informational*/

#define kern_debug "<7>"

/* debug-level messages*/

單獨編譯乙個核心模組的方法

單獨編譯核心模組的方法 安裝kernel devel包 rpm ivh kernel 3.10.0 957.el7.src.rpm 這裡以該版本核心為例 在 root目錄下會生成rpmbuild目錄,具體情況如下圖所示 進入到rpmbuild spec目錄,該目錄下會有核心原始碼解壓出來的spec檔...

ubuntu下編譯第乙個核心模組

1.首先在終端輸入命令 uname r 得到作業系統的發行版號 我的是3.13.0 32 generic 記住這個,等下要用 2.編寫乙個核心模組,內容如下,檔案名字命名為hello.c include include include module license dual bsd gpl stat...

開始寫乙個核心模組

從hello world開始,乙個完整的核心模組helloword.c如下 include module init 和 module exit 的標頭檔案 include 這個標頭檔案包含了許多符號與函式的定義,這些符號與函式多與載入模組有關 module license dual bsd gpl ...