如何为内核模块 makefile 添加包含路径

How do I add an include path for kernel module makefile

提问人:MOHAMED 提问时间:4/16/2012 最后编辑:Oliver CharlesworthMOHAMED 更新时间:8/24/2021 访问量:26240

问:

如何为内核模块 makefile 添加包含路径?我想在test_module.c中包含“test_kernel.h”。“test_kernel.h”位于其他目录“inc”中 我在 Makefile 中尝试了以下解决方案,但它不起作用:

obj-m += test_module.o

test_module:
    $(MAKE) -C "$(LINUX_DIR)" -Iinc $(MAKE_OPTS) modules
c makefile linux内核

评论


答:

1赞 Oliver Charlesworth 4/16/2012 #1

-I是 GCC 标志,而不是 Make 标志。1 你需要将一个变量传递给你的 “sub” Make 进程;也许是这样的:

$(MAKE) -C "$(LINUX_DIR)" CPPFLAGS="-Iinc" $(MAKE_OPTS) modules

其中 是隐式规则中使用的标准 Make 变量。您可以随意使用自己的变量,并确保在子制作中正确使用它。CPPFLAGS

Make 手册提供了有关在 Make 实例之间通信变量的更多详细信息:http://www.gnu.org/software/make/manual/make.html#Variables_002fRecursion


1.实际上,它也是一个Make标志,但用于完全无关的东西。

评论

0赞 Oliver Charlesworth 4/16/2012
@MohamedKALLEL:是的,我弄错了。我已经更新了我的答案。
0赞 Oliver Charlesworth 4/16/2012
@MohamedKALLEL:您的子品牌是否使用默认规则进行 C 编译?如果不是,显式规则是否使用该变量?CPPFLAGS
2赞 ticcky 4/16/2012 #2

您确定在文件中正确指定了包含吗?

例如:

#include "inc/something.h"

而不是

#include <inc/something.h>
19赞 another.anon.coward 4/17/2012 #3

您应该在 .尝试以下几行:EXTRA_CFLAGSMakefile

obj-m += test_module.o
EXTRA_CFLAGS=-I$(PWD)/inc

test_module:
    $(MAKE) -C "$(LINUX_DIR)" $(MAKE_OPTS) modules

请参阅此处的第 3.7 节。
希望这有帮助!
Compilation Flags

评论

4赞 hesham_EE 10/28/2014
这非常有用。阅读较新的文档,似乎EXTRA_CFLAGS现在已被弃用。您可以使用 ccflags-y=-I$(PWD)/inc 而不是 EXTRA_CFLAGS。在此处查看第 3.7 节。
0赞 Chan Kim 7/21/2021
EXTRA_CFLAGS似乎也在起作用。并且路径应指定为从内核构建目录(用 -C 指定的目录)中看到的路径。
0赞 vmemmap 10/13/2022
文档明确提到您应该使用 .Flags with the same behaviour were previously named: EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS. They are still supported but their usage is deprecated.ccflags-y
3赞 Bassem Ramzy 8/24/2021 #4

对我来说,许多试验都失败了,直到其中一次成功。 在路径中使用将使用 ,例如:$(src)ccflags-y

# Include Paths
ccflags-y       += -I$(src)/../../lib/include 

对于从源文件夹向上两级的目录“/lib/include”。

这是由 Kernel.org 中的语句驱动的

引用位于 src 树中的文件时,请始终使用 $(src) 特别是,如果您的源代码位于 Linux 内核树之外的目录中。

评论

0赞 goodman 5/2/2023
是的,我尝试使用而不是,但它不起作用。感谢您的参考链接。$(CURDIR)$(src)