[IMX6Q]uboot_v2015.04コンパイルプロセス分析

4779 ワード

u-bootバージョン:v 2015.04
branch: imx_v2015.04_3.14.52_1.1.0_ga
#make mx6qecovacsandroid_config
Makefile:
%config: scripts_basic outputmakefile FORCE
    $(Q)$(MAKE) $(build)=scripts/kconfig $@
scripts/kconfig/Makefile:
# Added for U-Boot (backward compatibility)
%_config: %_defconfig
    @:

%_defconfig: $(obj)/conf
    $(Q)$< --defconfig=arch/$(SRCARCH)/configs/$@ $(Kconfig)
$<は$(obj)/confであり、実行可能プログラムであり、$(SRCARCH)は.,$@mx 6 qecovacsandroid_ですdefconfig
$(Kconfig)はルートディレクトリKconfigです.
だから$(Q)$<--defconfig=arch/$(SRCARCH)/configs/$(Kconfig)
そうです
$(obj)/conf --defconfig=configs/mx6qecovacsandroid_defconfig Kconfig
このプロセスは主にmx 6 qecovacsandroid_defconfigとKconfigの定義は.configファイルでは、
次のmakeでは、Kconfigが対応するディレクトリのKconfigを再帰的に含むように使用されます.次のセクションが注目されています.
source "arch/Kconfig"

arch/Kconfig:
source "arch/arm/Kconfig"

arch/arm/Kconfig:
source "board/freescale/mx6qecovacs/Kconfig"
 Kconfig !

board/freescale/mx6qecovacs/Kconfig:
if TARGET_MX6QECOVACS

config SYS_BOARD
    default "mx6qecovacs"

config SYS_VENDOR
    default "freescale"

config SYS_SOC
    default "mx6"

config SYS_CONFIG_NAME
    default "mx6qecovacs"

endif
これらのパラメータとu-boot_v2009.08の中のは同じで、だから実はただコンパイルの方法が异なっているだけです.
新しいバージョンでは、パフォーマンスを向上させるためにkernelと同じコンパイル方法が使用されています.まずconf解析Kconfigにより生成する.config,
その後、コンパイルシステムは.configはinclude/config/autoを生成する.次にMakefileとsripts/Makefile.build
このようなディレクトリのMakefileは、これらの変数でどのファイルがコンパイルされるかを決定することができます.
次の呼び出し
#make
デフォルトのターゲットは_all:
PHONY += all
ifeq ($(KBUILD_EXTMOD),)
_all: all
else
_all: modules
endif

allの定義:
#grep 'ALL-y' . -rns
./scripts/Makefile.spl:152:ALL-y    += $(obj)/$(SPL_BIN).bin
./scripts/Makefile.spl:155:ALL-y    += $(obj)/$(BOARD)-spl.bin
./scripts/Makefile.spl:159:ALL-y    += $(obj)/sunxi-spl.bin
./scripts/Makefile.spl:163:ALL-y    += boot.bin
./scripts/Makefile.spl:166:all:    $(ALL-y)
./Makefile:731:ALL-y += u-boot.srec u-boot.bin System.map binary_size_check
./Makefile:760:ALL-y += u-boot-dtb-tegra.bin
./Makefile:762:ALL-y += u-boot-nodtb-tegra.bin
./Makefile:769:ALL-y += $(CONFIG_BUILD_TARGET:"%"=%)
./Makefile:792:all:        $(ALL-y)
./arch/arm/config.mk:104:ALL-y += checkarmreloc
./arch/arm/config.mk:125:ALL-y += SPL
./arch/arm/config.mk:129:ALL-y += u-boot-dtb.imx
./arch/arm/config.mk:131:ALL-y += u-boot.imx
auto.confはコンパイル前に間接的に呼び出されます.
Makefile:
include/config/uboot.release: include/config/auto.conf FORCE
    $(call filechk,uboot.release)
Makefile:
include/config/%.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd
    $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig
    @# If the following part fails, include/config/auto.conf should be
    @# deleted so "make silentoldconfig" will be re-run on the next build.
    $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.autoconf || \
        { rm -f include/config/auto.conf; false; }
    @# include/config.h has been updated after "make silentoldconfig".
    @# We need to touch include/config/auto.conf so it gets newer
    @# than include/config.h.
    @# Otherwise, 'make silentoldconfig' would be invoked twice.
    $(Q)touch include/config/auto.conf
scripts/kconfig/Makefile:
silentoldconfig: $(obj)/conf
    $(Q)mkdir -p include/config include/generated
    $< --$@ $(Kconfig)
$<--$@$(Kconfig)つまり
$(obj)/conf --silentoldconfig Kconfig
confを使用してautoを生成する.conf,autoconf.hこの2つの重要なファイル.
後はautoによるconfとautoconf.hの定義はu-bootを生成する.bin, u-boot.imxなどのファイル
ああimxの例:
./arch/arm/imx-common/Makefile:53:u-boot.imx: u-boot.bin $(IMX_CONFIG) FORCE

./Makefile:848:u-boot.bin: u-boot FORCE

./Makefile:1128:u-boot:    $(u-boot-init) $(u-boot-main) u-boot.lds

./Makefile:678:u-boot-init := $(head-y)

./Makefile:679:u-boot-main := $(libs-y)

./arch/arm/Makefile:65:head-y := arch/arm/cpu/$(CPU)/start.o

./Makefile:627:libs-y += lib/
./Makefile:630:libs-y += fs/
./Makefile:631:libs-y += net/
./Makefile:632:libs-y += disk/
./Makefile:633:libs-y += drivers/
./Makefile:634:libs-y += drivers/dma/
./Makefile:635:libs-y += drivers/gpio/
./Makefile:636:libs-y += drivers/i2c/
......
./arch/arm/Makefile:63:libs-y += $(machdirs)
./arch/arm/Makefile:73:libs-y += arch/arm/cpu/$(CPU)/
./arch/arm/Makefile:74:libs-y += arch/arm/cpu/
./arch/arm/Makefile:75:libs-y += arch/arm/lib/
./arch/arm/Makefile:79:libs-y += arch/arm/imx-common/
......