U-boot, являющийся загрузчиком, предназначенным для другой архитектуры и SoC, содержит несколько исходных файлов, и только некоторые из них попадают в финальный исполняемый файл для конкретной платы. Например, в каталоге arch / существует один каталог для каждой архитектуры. Если сборка предназначена для SoC с архитектурой ARM, только некоторые файлы из arch / arm / будут скомпилированы в исполняемый файл.
Какой из исходных файлов будет скомпилирован в исполняемый файл, зависит от конфигурации сборки. Эта конфигурация контролируется файлом, присутствующим в каталоге configs /. В случае BeagleBone Black это файл configs / am335x_boneblack_defconfig . Этот файл определяет несколько переменных, которые используются в Makefiles.
Часть config / 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, так что содержимое вышеупомянутого make-файла заменяется на
obj-y + = clock_am33xx.o
Выяснить, какие исходные файлы включены в окончательный исполняемый файл, просто выполнив поиск переменных конфигурации во всех файлах Makefile, является утомительной задачей.
Мне нужен способ для создания списка исходных файлов, который автоматически компилируется для определенного файла конфигурации . Есть ли способ сделать это?