核心模組的代碼檔案
檔案 yyyy.c (yyyy可以與模組xxxx同名也可以不同名)
(類似模板的東西)
#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE //直接添加到核心時去掉,產生模組時保留
#define MODULE
#endif
#include <*.h>
...
MODULE_LICENSE("GPL"); //許可證申明,用來告知核心,該模組帶有一個許可證
MODULE_AUTHOR("you name"); //作者申明(可選)
MODULE_DESCRIPTION("aaaa");//模組描述(可選)
MODULE_VERSION("V1.0"); //模組版本(可選)
MODULE_ALIAS("a bbbb module"); //模組別名(可選)
static int __inti xxxx_init(void)
{
}
static void __inti xxxx_exit(void)
{
}
... // 其他函數
...
module_init(xxxx_init);
module_exit(xxxx_exit);
核心編譯的Makefile
Makefile
(類似模板的東西)
ifneq ($(KERNELRELEASE),)
obj-m := xxxx.o
xxxx-objs := yyyy.o (如有其它源檔案繼續添加 zzzz.o ...)(如yyyy = xxxx 且只有一個源檔案,該行可去掉)
else
KDIR := /lib/module/2.6.28.6/build
all:
make -C $(KDIR ) M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
其中 /lib/module/2.6.28.6/build 為建立核心代碼樹所產生的目錄,建立核心代碼數:
http://blog.csdn.net/leaglave_jyan/article/details/6652444
編輯好源檔案和Makefile後,該目錄下運行 make 即可編譯產生 模組 xxxx.ko 檔案
使用 insmod xxxx.ko 添加