先創建一個資料夾 並寫個簡單的 kernel module (hello.c)
$ mkdir helloworld
$ cd helloworld
helloworld$ vim hello.c
/* hello.c */ #include <linux/init.h>#include <linux/module.h> MODULE_DESCRIPTION("Hello_world"); MODULE_LICENSE("GPL"); static int hello_init(void) { printk(KERN_INFO "Hello world !\n"); return 0; } static void hello_exit(void) { printk(KERN_INFO "ByeBye !\n"); } module_init(hello_init); //When u use insmod, it will enter hello_init function module_exit(hello_exit); //When u use rmmod, it will enter hello_exit function
接著在同個目錄下寫個 Makefile
helloworld $ vim Makefile
PWD := $(shell pwd) KVERSION := $(shell uname -r) KERNEL_DIR = /usr/src/linux-headers-$(KVERSION)/ MODULE_NAME = hello obj-m := $(MODULE_NAME).o all: make -C $(KERNEL_DIR) M=$(PWD) modules clean: make -C $(KERNEL_DIR) M=$(PWD) clean
最後就可以使用 sudo make 指令來編譯他
將他編成 .ko 檔
helloworld$ sudo make
使用 insmod 來載入 module
helloworld$ sudo insmod hello.ko
//載完後用 dmesg 來觀看 kernel 訊息
helloworld$ dmesg
可以看到成功 print 出 hello world ! 字串
你也可以使用 lsmod 指令來列出目前在使用的 module
helloworld$ lsmod | grep "hello"
//grep "hello" 是用來濾出我們的 hello module 的
最後想要移除掉模組的話 要使用 rmmod
helloworld$ sudo rmmod hello.ko
//再觀察一次 kernel 訊息
helloworld$ dmesg
可以看到 print 出了 ByeBye ! 字串
沒有留言:
張貼留言