【发布时间】:2018-10-26 08:28:59
【问题描述】:
U-boot 是针对不同架构和 SoC 的引导加载程序,有多个源文件,只有其中一些可以成为特定板的最终可执行文件。例如,在 arch/ 目录中,每个架构都有一个目录。如果构建是针对 ARM 架构 SoC,则只有 arch/arm/ 中的部分文件会被编译成可执行文件。
哪些源文件被编译成可执行文件取决于构建的配置。此配置由 configs/ 目录中的文件控制。对于 BeagleBone Black,此文件为 configs/am335x_boneblack_defconfig。该文件定义了几个在 Makefile 中使用的变量。
configs/am335x_defconfig的一部分如下图:
CONFIG_ARM=y
CONFIG_ARCH_OMAP2PLUS=y
CONFIG_TI_COMMON_CMD_OPTIONS=y
CONFIG_AM33XX=y
CONFIG_DISTRO_DEFAULTS=y
这些文件中定义的变量稍后会在其他 Makefile 中引用。比如上面定义的CONFIG_AM33XX变量在/arch/arm/mach-omap2/am33xx/Makefile中引用如下:
obj-$(CONFIG_AM33XX) += clock_am33xx.o
obj-$(CONFIG_TI814X) += clock_ti814x.o
obj-$(CONFIG_AM43XX) += clock_am43xx.o
ifneq ($(CONFIG_AM43XX)$(CONFIG_AM33XX),)
obj-y += clock.o
endif
我猜是在执行命令时
$make am335x_boneblack_defconfig
变量 CONFIG_AM33XX 的值在 Makefile 的一些临时副本中被替换,因此上述 makefile 的内容被替换为
obj-y += clock_am33xx.o
仅通过在所有 Makefile 中搜索配置变量来确定最终可执行文件中包含哪些源文件是一项繁琐的任务。 我需要一种方法来创建自动为特定配置文件编译的源文件列表。有办法吗?
【问题讨论】: