我应该如何为 linux 内核模块构建设置额外的包含路径?
Posted
技术标签:
【中文标题】我应该如何为 linux 内核模块构建设置额外的包含路径?【英文标题】:How should I set extra include path for linux kernel module build? 【发布时间】:2021-09-28 12:18:16 【问题描述】:这是我用于交叉构建内核模块的 Makefile。
export CROSS_COMPILE:=aarch64-none-linux-gnu-
export ARCH:=arm64
obj-m += chr_drv_ex1.o
export KDIR:=linux-source-5.4.0
#EXTRA_CFLAGS=-I../../qemu-5.1.0/hw/misc
#ccflags-y=-I../../qemu-5.1.0/hw/misc
all: test_chr_drv map_hugetlb test_ioctl_drv
make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KDIR) M=$(PWD) modules
clean:
make ARCH=$(ARCH) CROSS_COMPILE=$(CROSS_COMPILE) -C $(KDIR) M=$(PWD) clean
rm -f test_chr_drv map_hugetlb test_ioctl_drv
%: %.c
$(CROSS_COMPILE)gcc $^ -o $@
现在在我的 chr_drv_ex1.c 文件中,我想在 ../../qemu-5.1.0/hw/misc 目录中包含一个头文件。添加此路径的正确方法是什么?我看到this 并尝试设置 EXTRA_CFLAGS 和 ccflags-y 但它们都不起作用(这些都在上面注释掉了)。当然,如果我在 chr_drv_ex1.c 源代码中使用#include "../../qemu-5.1.0/hw/misc/axpu_regs.h"
,我可以编译它。但我想用#include <axpu_regs.h>
。
【问题讨论】:
天哪,为了实现你想要的,第 3 行和cflags-y
可能的行就足够了。
这能回答你的问题吗? Linux kernel module Makefile can't include relative paths
【参考方案1】:
我把 ccflags-y 改成
ccflags-y := -I../../qemu-5.1.0/hw/misc
到
ccflags-y := -I../../../qemu-5.1.0/hw/misc
因此,应该从内核 make 目录(Linux 内核的 Makefile 所在的位置。在本例中为 linux-source-5.4.0 目录,它比我现在所在的位置低一级)指定包含路径。
【讨论】:
了解$(src)
和$(srctree)
(第二个名字我记不太清了,用git grep ...
找例子。以上是关于我应该如何为 linux 内核模块构建设置额外的包含路径?的主要内容,如果未能解决你的问题,请参考以下文章
应该如何为 laravel 4 composer 包设置 git 子模块?