【问题标题】:Error compiling kernel module with two source files使用两个源文件编译内核模块时出错
【发布时间】:2016-03-25 23:00:39
【问题描述】:

我正在尝试编译具有两个 .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 文件时(神奇地)使用的包含目录生成这两个 .o 文件。在这种情况下一切正常。

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

【问题讨论】:

  • 你不需要用-I./init之类的编译吗?
  • 我还没有看到任何使用它的例子。至少对于单一来源的情况,绝对不需要。
  • 本页:https://www.kernel.org/doc/Documentation/kbuild/modules.txtkbuild上的官方文档。建议按照那里的示例为内核构建外部模块。特别注意:=和类似的宏定义类型的使用

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


【解决方案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

【讨论】:

    猜你喜欢
    • 2020-09-11
    • 2020-03-19
    • 2012-05-11
    • 2013-07-04
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    相关资源
    最近更新 更多