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

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

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

最佳答案

我像下面这样编写了 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

关于c - 使用两个源文件编译内核模块时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36229438/

相关文章:

c++ - 将 libpng 链接到 android 原生项目

c - 使用 zend 读取 php.ini for PHP 扩展(不是 PHP 语言)

c - 将格式说明符存储在指针中

linux - 纳米与 "readelf -s"

linux -/usr/bin/time,解释输出

linux - printf 上的段错误 - NASM 64 位 Linux

c++ - 修改 Makefile 添加 GSL 库

c - 如何使用 FILE 作为 C 函数的参数?

c - 使用扩展 ASM,什么可以确保操作数的读/写在所需的时间发生?

makefile - 强制 make 从文件中查找过时的情况