如何在 Makefile 中添加多个 Headers 文件路径?

How to add multiple Headers files path in a Makefile?

我正在尝试编译 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

有什么建议吗?谢谢

最简单的是:

${CC} -I/opt/poky-atmel/2.5.3/sysroots/cortexa5hf-neon-poky-linux-gnueabi/usr/src/kernel/include/linux uleds.c

尝试阅读以下内容以熟悉其他 GCC(编译器)选项:https://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html#Directory-Options

这似乎是对 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,它将了解内核的所有信息并能够正确构建您的模块。

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

详情见Linux Kernel Makefiles and Building External Modules