testmodule.c#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>
static int hello_init(void)
{
printk("Hello! This is the first test module!\n");
return 0;
}
static void hello_exit(void)
{
printk("Module exit! Bye Bye!\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("GPL");
關鍵點說明:
module_init() 與 module_exit() 宏分別指定模組載入與卸載時的入口函數。printk() 是內核空間的輸出函數,訊息會輸出到內核日誌(可用 dmesg 查看)。MODULE_LICENSE("GPL") 聲明授權,避免內核標記為「受污染」。obj-m := testmodule.o
KDIR := /src/linux-2.6.12
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
注意:
$(MAKE) 前必須為一個 Tab 字元,不能用空格。KDIR 指向目標板子運行的內核源碼目錄,且必須與交叉編譯器版本一致,否則模組無法載入。make CC=/src/3.4.1/bin/arm-linux-gcc
編譯成功後會產生 testmodule.ko(Kernel Object)檔案。
testmodule.ko 下載到開發板。chmod +x testmodule.koinsmod testmodule.koHello! This is the first test module!rmmod testmodule.koModule exit! Bye Bye!KDIR 指向正確的內核樹。CONFIG_*)。