【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
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的一些有趣的地方.