首页 > 解决方案 > 如何在 Makefile 中添加多个 Headers 文件路径?

问题描述

我正在尝试编译 uleds.c 驱动程序,该驱动程序包含该路径下存在的多个文件:

/opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi/usr/src/kernel/include/linux

我现在想修改我的 Makefile 并添加这个路径,这样我就可以正确编译 uleds.c

这是我的 Makefile :

#CC=arm-poky-linux-gnueabi-gcc -march=armv7-a -marm -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a5 --sysroot=/opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi
#CC="gcc"

obj-m += uleds.o

KERNEL_SOURCE := /opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi/lib/modules/4.14.73-linux4sam-6.0-dirty

default:
        ${CC} ${KERNEL_SOURCE} uleds.c

clean:
        ${CC} $(INC) ${KERNEL_SOURCE} clean

有什么建议吗?谢谢

标签: makefilecompilationincludeinclude-pathkbuild

解决方案


这似乎是对 kbuild 文件的尝试。

您不应该使用您的default规则自己手动编译文件。相反,您应该运行内核的 makefile,并让它编译基于obj-m和朋友的驱动程序。

你的 makefile 看起来像这样:

ifneq ($(KERNELRELEASE),)

ccflags-y += -I some/other/dir
obj-m += uleds.o

else

# default to build against running kernel if KDIR not
# specified:
KDIR ?= /lib/modules/`uname -r`/build

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

endif

如果您从驱动程序目录调用 make,它会依次从您的内核目录调用 make,该目录将了解有关内核的所有信息并能够正确构建您的模块。

请注意,默认情况下,内置内核的 clean 目标将删除所有生成的*.[oas]文件,因此不需要特殊clean目标。此外,默认情况下,内核的 makefile 将包含它自己的include目录,因此您可能不需要为此做任何特别的事情。如果您确实需要从其他地方包含,您可以向 中添加-I指令,ccflags-y如示例中所示。

有关详细信息,请参阅Linux 内核 Makefile构建外部模块


推荐阅读