跳过正文

Uboot编译过程分析

·176 字·1 分钟
jiladahe1997
作者
jiladahe1997
To see the world as it is, and to love it
  1. 先运行 make xxx_defconfig 命令:
  • 此命令会去configs/目录下寻找对应的 xxx_defconfig 文件
CONFIG_SYS_EXTRA_OPTIONS="IMX_CONFIG=board/freescale/mx6ullevk/imximage_lpddr2.cfg"
CONFIG_ARM=y
CONFIG_ARCH_MX6=y
CONFIG_TARGET_MX6ULL_9X9_EVK=y
CONFIG_CMD_GPIO=y

  1. CONFIG_TARGET_MX6ULL_9X9_EVK=y 这一行,会声明一个TARGET_MX6ULL_9X9_EVK 。 然后在 board/freescale/mx6ullevk/Kconfig 中有:
if TARGET_MX6ULL_14X14_EVK || TARGET_MX6ULL_9X9_EVK

config SYS_BOARD
	default "mx6ullevk"

config SYS_VENDOR
	default "freescale"

config SYS_CONFIG_NAME
	default "mx6ullevk"

endif

  1. boards / SYS_VENDOR / SYS_BOARD 和 指定源文件所在的目录, 会自动加载此文件夹中的 makefile

  2. include / SYS_CONFIG_NAME 指定头文件的位置


*注:会自动加载 SYS_VENDOR / common / makefile






Makefile分析
#

Makefile

主入口_all

# That's our default target when none is given on the command line
PHONY := _all
_all:
198: _all: all

802: all:		$(ALL-y)

arch/arm/config.mk

134: ALL-y += u-boot.imx

arch/arm/imx-common/Makefile

u-boot.imx: u-boot.bin u-boot.cfgout $(PLUGIN).bin FORCE
	$(call if_changed,mkimage)



# mkimage source config file
IMX_CONFIG = $(CONFIG_IMX_CONFIG:"%"=%)

# How to create a cpp processed config file, they all use the same source
%.cfgout: $(IMX_CONFIG) FORCE
	$(Q)mkdir -p $(dir $@)
	$(call if_changed_dep,cpp_cfg)


Makefile中 u-boot.bin

u-boot.bin: u-boot-fit-dtb.bin FORCE
	$(call if_changed,copy)

Makefile中 mkimage命令:

quiet_cmd_mkimage = MKIMAGE $@
cmd_mkimage = $(objtree)/tools/mkimage $(MKIMAGEFLAGS_$(@F)) -d $< $@ \
	>$(MKIMAGEOUTPUT) $(if $(KBUILD_VERBOSE:0=), && cat $(MKIMAGEOUTPUT))

arch/arm/mach-imx/Makefile 中 MKIMAGEFLAGS_u-boot.imx:

MKIMAGEFLAGS_u-boot.imx = -n $(filter-out $(PLUGIN).bin $< $(PHONY),$^) \
	-T $(IMAGE_TYPE) -e $(CONFIG_SYS_TEXT_BASE)




附录A:编译日志:
#

SPLoutput.log output.log



附录B: makefile的调试方法:
#

https://stackoverflow.com/questions/54753/tool-for-debugging-makefiles