1

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

有什么建议吗?谢谢

4

2 回答 2

2

这似乎是对 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构建外部模块

于 2019-08-29T13:22:41.897 回答
0

最简单的是:

${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

于 2019-08-29T12:51:00.547 回答