uboot2016.11分析1 - 项目的总Makefile

【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) 

uboot2016.11分析1 - 项目的总Makefile

   一个大的系统, 总有一个站在顶端的Makefile指挥着下面uboot/kernel/rootfs的编译过程, 我们一步步深入, 了解uboot.

1. 项目的总Makefile

##########################################################################################
#task [1]	build uboot
##########################################################################################
hiboot: prepare hiregbin_prepare
	@echo "---------task [1]	build boot"
	
	# 进入$(OSDRV_DIR)/opensource/uboot目录, 解压secureboot_release.tgz文件到当前目录, 返回
	pushd $(OSDRV_DIR)/opensource/uboot;tar xzf secureboot_release.tgz -C .;popd
	
	# wildcard 返回匹配此模式的所有文件列表
	#该行是在对比$(OSDRV_DIR)/opensource/uboot目录下的uboot压缩包是否和我们猜想的一致. 若不一致则执行中间的操作 ==> 进行解压
ifneq ($(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER), $(wildcard $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER)))
	pushd $(OSDRV_DIR)/opensource/uboot;tar xzf $(UBOOT_TAR) -C .;popd
endif

	# xargs可以将输入内容(通常通过命令行管道传递),转成后续命令的参数
	# 这里是touch一下$(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER)文件, 刷新一下修改时间, 便于以后查看该uboot是什么时候编译的.
	find $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER) | xargs touch

	# 编译uboot
	make -C $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER) ARCH=arm CROSS_COMPILE=$(OSDRV_CROSS)- $(UBOOT_CONFIG)

	# 这里也是编译uboot
	pushd $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER);make ARCH=arm CROSS_COMPILE=$(OSDRV_CROSS)- -j 20 >/dev/null;popd

	# 编译gzip并放到$(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER)/arch/arm/cpu/armv7/$(CHIP)/hw_compressed中, 赋予执行权限.
	make -C $(OSDRV_DIR)/tools/pc/hi_gzip/
	cp $(OSDRV_DIR)/tools/pc/hi_gzip/bin/gzip $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER)/arch/arm/cpu/armv7/$(CHIP)/hw_compressed -rf
	chmod +x $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER)/arch/arm/cpu/armv7/$(CHIP)/hw_compressed/gzip
	
	# 拷贝$(OSDRV_DIR)/tools/pc/uboot_tools/$(UBOOT_REG_BIN)到$(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER)并重命名为.reg
	cp $(OSDRV_DIR)/tools/pc/uboot_tools/$(UBOOT_REG_BIN) $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER)/.reg
	#编译uboot
	pushd $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER);make ARCH=arm CROSS_COMPILE=$(OSDRV_CROSS)- u-boot-z.bin >/dev/null;popd

	# 拷贝uboot烧录bin到xxx目录下, 第一个目录用于烧录, 第二个目录用于uboot加密.
	cp $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER)/u-boot-$(CHIP).bin $(OSDRV_DIR)/pub/$(PUB_IMAGE)
	cp $(OSDRV_DIR)/opensource/uboot/$(UBOOT_VER)/u-boot-$(CHIP).bin  $(OSDRV_DIR)/opensource/uboot/secureboot_release

上述的编译uboot的片段中我们可以看出, 在uboot目录下一共make了三次, 这三次分别有什么作用呢? 我们在uboot目录下的Makefile中揭晓.

2. uboot下的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)
   2. make
   3. make u-boot-z.bin

各自做了什么, 暂未深究, 下一篇研究uboot的Makefile的一些有趣的地方.

发布了68 篇原创文章 · 获赞 22 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/MACMACip/article/details/104941691