Как создать список исходных файлов, скомпилированных для конкретной конфигурации платы в исходниках u-boot?

U-boot, будучи загрузчиком, предназначенным для разных архитектур и SoC, имеет несколько исходных файлов, и только некоторые из них попадают в окончательный исполняемый файл для конкретной платы. Например, в каталоге arch/ есть один каталог для каждой архитектуры. Если сборка предназначена для SoC с архитектурой ARM, только некоторые файлы в 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 — утомительная задача. Мне нужен способ создать список исходных файлов, который будет компилируется для конкретного файла конфигурации автоматически. Есть ли способ сделать это?


person SRK    schedule 16.05.2018    source источник


Ответы (1)


Просто выполните чистую сборку и найдите все объектные файлы:

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

Возможно, вы захотите исключить каталоги tools/ и scripts/.

person Xypron    schedule 16.05.2018
comment
Есть ли простой способ собрать связанные исходные файлы (.o может быть сгенерирован из файла ASM или файла C) в отдельный каталог? - person SRK; 17.05.2018