- 先运行
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
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
-
boards / SYS_VENDOR / SYS_BOARD
和 指定源文件所在的目录, 会自动加载此文件夹中的makefile
-
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:编译日志: #
附录B: makefile的调试方法: #
https://stackoverflow.com/questions/54753/tool-for-debugging-makefiles