最近在學習arm平台下的內核模塊開發,現將內核模塊建立過程記錄一下。
從編寫代碼的角度來看,創建一個簡單的的內核模塊可以分3步走:
1. 添加頭文件(linux/init.h 和linux/module.h);
2. 加載內核(函數module_init);
3. 卸載內核(函數module_exit)
如一個簡單的內核模塊如下:
#include <linux/init.h>
#include <linux/module.h>
static int hello_init()
{
printk(KERN_WARNING"hello my module!\n");
return 0;
}
static void hello_exit()
{
printk(KERN_WARNING"module exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
事實上,關鍵部分是兩個宏 module_init() 和module_exit(),這兩個宏分別完成了內核模塊安裝和內核模塊卸載,他們的代碼都是內核實現的,用戶程序只要調用即可。當然,一個內核模塊的組成部分還有其他可選的選項,但是這裡的是必須的,也是最簡單的一個部分。
寫完代碼部分,接著完成Makefile的編寫如下:
obj-m := hello.o
KDIR :=/home/win/myfiles/linux-mini2440
all:
make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm
clean:
rm -f *.o *.ko *.order
這是內核模塊只有一個源文件的Makefile,如果源文件有多個,則采用如下版本:
obj-m := modulename.o
modulename-objs := file1.o file2.o file3.o ......
KDIR :=/home/win/myfiles/linux-mini2440
all:
make -C $(KDIR) M=$(PWD) modules CROSS_COMPILE=arm-linux- ARCH=arm
clean:
rm -f *.o *.ko *.order
然後回到代碼所在目錄執行make 命令,即可產生 .ko 文件。