makefile - 如何在 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
有什么建议吗?谢谢
解决方案
这似乎是对 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和构建外部模块。
推荐阅读
- java - Nodejs:Spawn jar(不可执行)
- wordpress - Wordpress - 将设置页面添加到自己的菜单页面
- ruby - Ruby 绑定上下文
- ruby - 正前瞻和非捕获组差异
- python - 用 NumPy 编写一个函数来计算具有特定容差的积分
- python - 在 python 中,我如何设置 LP_c_ubyte 的值
- wpf - 使用命令更改窗口控制值
- c# - 如何让 asp.net core razor 验证器在页面加载时显示
- excel - 需要帮助,如果语句没有提供所需的结果。比较单元格中的值相同,但 if 参数在一半时间内有效
- python - 如何根据另一个 rows 属性在一行中添加元素?