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 ...