我想将.c
文件编译成.o
文件,以便在稍后的单独阶段将其与其他文件链接以生成可加载模块(.ko
文件)。 / p>
我尝试按照Kbuilds文档(2.4 here),但没有成功:
obj-m: myfile.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$PWD/ myfile.o
输出结果为:
$ make
cc -c -o myfile.o myfile.c
myfile.c:42:26: fatal error: linux/printk.h: No such file or directory
#include <linux/printk.h>
^
compilation terminated.
<builtin>: recipe for target 'myfile.o' failed
make: *** [myfile.o] Error 1
答案 0 :(得分:1)
首先,因为你在这里对标题致命,所以首先要包括所有必需的头文件
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
#include <linux/init.h> /* Needed for the macros */
第二件事,在Makefile
目标中应该是modules
而不是单.o
个文件
obj-m += myfile.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules