单个文件编译一个模块:
我们对多个 *.c 文件情况做一个说明:我们希望创建一个模块的名字叫做hello,我们有三个*.c文件,分别为hello.c, file1.c和file2.c。这样是有问题的,
因为在Makefile中 obj-m := hello.o,这是指定模块的名称,
hello-objs := file1.o file2.o hello.o,这里是说hello模块包括的的obj文件,
如果我们在里面不填写hello.o,那么实际并没有编译hello.c,而是在CC[M] file1.o和file2.o,通过LD[M]得到模块hello.o,
如果我们在这里填写了hello.o,那么在obj-m和hello-objs中都含有hello.o,对make来讲会产生循环和混淆,因此也不能这样书写。
如果我们由多个C文件来构造一个模块,那么C文件的名字不能和模块名字一样, 在这个例子中我们可以将hello.c改名为hello_main.c,在Makefile中obj-m := hello.o,hello-objs = file1.o file2.o hello_main.o。
比如,当前目录下有如系文件:
hide_file.c hook.c k_file.c config.h hook.h k_file.h
想编译为模块 root.ko 其中hook.c 为主文件,Makefile 可以用如下办法写:
KDIR 也可以写成如下形式:
KVERS=$(shell uname -r)
KDIR :=/lib/modules/$(KVERS)/build
http://blog.youkuaiyun.com/xsckernel/article/details/8159523