使用两个源文件编译内核模块时出错

时间:2016-03-25 23:00:39

标签: c linux makefile linux-kernel kernel-module

我正在尝试编译一个包含两个.c文件的内核模块。我的Makefile是以下

module-y: dummy.o library.o  
obj-m += module.o

default:
    make -C /lib/modules/`uname -r`/build M=$(PWD) modules

当我跑步时,我得到了

cc    -c -o dummy.o dummy.c
dummy.c:3:24: fatal error: linux/init.h: No such file or directory

似乎Makefile现在不知道在哪里找到标题。

我已经尝试过使用CFLAGS来添加包含目录,但是有很多这样的目录变得乏味且难以做到(没有设法让它工作)。

我想使用在使用单个.c文件时(神奇地)使用的include目录生成这两个.o文件。在这种情况下一切正常。

如何在使用两个源文件时修复包含目录?

1 个答案:

答案 0 :(得分:1)

我像下面这样写了Makefile,它起作用了:

ifneq ($(KERNELRELEASE),)
# kbuild part of makefile
obj-m  := module.o
module-y := library.o dummy.o

else
# normal makefile
KDIR ?= /lib/modules/`uname -r`/build

default:
        $(MAKE) -C $(KDIR) M=$$PWD modules
endif