如何在 u-boot 源中生成为特定板配置编译的源文件列表?

How to generate a list of source files compiled for a particular board configuration in u-boot sources?

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

我猜是在执行命令时

$制作am335x_boneblack_defconfig

变量 CONFIG_AM33XX 的值在 Makefile 的某个临时副本中被替换,因此上述 makefile 的内容被替换为

obj-y += clock_am33xx.o

仅通过搜索所有 Makefile 中的配置变量来找出最终可执行文件中包含哪些源文件是一项乏味的任务。 我需要一种方法来创建源文件列表,这些文件会自动针对特定配置文件进行编译。有办法吗?

只做一个干净的构建并搜索所有目标文件:

make mrproper
make foo_defconfig
make -j6
find . -name '*.o'

您可能想要排除目录 tools/scripts/.