【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
uboot2016.11分析3 - Makefile的目标
在uboot2016.11分析3 - Makefile的目标文章中, 我们发现uboot的Makefile一共被调用了三次, 分别是
make -C $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER) ARCH=arm CROSS_COMPILE=$(OSDRV_CROSS)- $(UBOOT_CONFIG)
pushd $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER);make ARCH=arm CROSS_COMPILE=$(OSDRV_CROSS)- -j 20 >/dev/null;popd
pushd $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER);make ARCH=arm CROSS_COMPILE=$(OSDRV_CROSS)- u-boot-z.bin >/dev/null;popd
他们各自做了什么事情呢? 我们一起来看看.
1. make $(UBOOT_CONFIG)
很明显第一个make是和板端配置相关的, 但是很可惜makefile中没有明显的写出板端配置项, 所以没办法找到相关的信息. 我猜想是由perl脚本完成了相关的工作.
2. make
# Always append ALL so that arch config.mk's can add custom ones
ALL-y += u-boot.srec u-boot.bin u-boot.sym System.map binary_size_check
# enable combined SPL/u-boot/dtb rules for tegra
ifeq ($(CONFIG_TEGRA)$(CONFIG_SPL),yy)
ALL-y += u-boot-tegra.bin u-boot-nodtb-tegra.bin
ALL-$(CONFIG_OF_SEPARATE) += u-boot-dtb-tegra.bin
endif
# Add optional build target if defined in board/cpu/soc headers
ifneq ($(CONFIG_BUILD_TARGET),)
ALL-y += $(CONFIG_BUILD_TARGET:"%"=%)
endif
all: $(ALL-y)
uboot make的具体工作, 很庞大, 就不分析了.(显得我的博文很费呀~)
3. make u-boot-z.bin
.PHONY: u-boot-z.bin
u-boot-z.bin: $(CURDIR)/u-boot.bin
make -C $(CURDIR)/arch/$(ARCH)/cpu/$(CPU)/$(SOC)/$(HW_DIR)/ \
CROSS_COMPILE=$(CROSS_COMPILE) \
BINIMAGE=$(CURDIR)/u-boot.bin TOPDIR=$(CURDIR)
由
(ARCH)/cpu/
(SOC)/$(HW_DIR)可知该uboot对应编出来的是对应哪个SOC.
因为他是make -C(进去编译的), 所以我们可以进到相应目录去查看具体SOC的makefile工作. 如下
.PHONY: $(BOOT).bin
$(BOOT).bin: $(BOOT).tmp regfile
@dd if=./$(BOOT).tmp of=./tmp1 bs=1 count=64 2>/dev/null
@dd if=$(REG) of=./tmp2 bs=8192 conv=sync 2>/dev/null
@dd if=./$(BOOT).tmp of=./tmp3 bs=1 skip=8256 2>/dev/null
@cat tmp1 tmp2 tmp3 > $(BOOT).bin
@rm -f tmp1 tmp2 tmp3
@chmod 754 $(BOOT).bin
@cp -fv $@ $(TOPDIR)
@echo $(BOOT).bin is Ready.
由上可见最终生成文件$(BOOT).bin, 且知道他是怎么组成的! 如果你更深入地看将会知道他做了什么事情, 我就不看了. Congratulation!