Uboot学习笔记(三)Uboot编译过程分析

简介

通过阅读讯为提供的使用手册,我们可以知道三星Exynos4412的Uboot的编译是通过调用build_uboot.sh来实现的,这个脚本文件通过传入参数的不同来生成不同内存大小、emmc大小的核心板的uboot.bin二进制文件,例如:SCP封装2GDDR内存的核心板的编译命令为

./build_uboot.sh SCP_2GDDR

所以我们就以它为起点来分析Uboot的编译过程
本篇文章将着重分析三个文件:build_uboot.sh、mkconfig、Makefile

build_uboot.sh分析

这个Uboot编译脚本是三星4412特有的,它其实是三星中国研究所为自己的4412开发板TC4写的,在TC4的Uboot文件夹中可以找到,讯为对它进行了修改,适配了自己的开发板,这个脚本完成了Uboot的配置、编译、清理和二进制文件打包的工作,可以让我们方便的生成.bin文件
对它的分析我以流程图的形式给出:
在这里插入图片描述
所以总结来说,build_uboot.sh这个脚本主要做了三个工作:

  • 根据传入的参数进行make config
  • make all 编译uboot镜像
  • 将多个二进制文件合并成最终的uboot镜像(这是4412的启动分层机制决定,BL1+BL2+uboot+TZSW)

关于make config的部分

在上面的build_uboot.sh脚本中执行了如下的指令

 make itop_4412_android_config_scp_2GDDR

我们先查看下Makefile可以找到如下的语句

itop_4412_android_config_scp_2GDDR:		unconfig
	@$(MKCONFIG) $(@:_config=) arm arm_cortexa9 smdkc210 samsung s5pc210 SCP_2GDDR

unconfig的规则是删除了许多的配置文件

unconfig:
	@rm -f $(obj)include/config.h $(obj)include/config.mk \
		$(obj)board/*/config.tmp $(obj)board/*/*/config.tmp \
		$(obj)include/autoconf.mk $(obj)include/autoconf.mk.dep

$(MKCONFIG)是执行mkconfig,MKCONFIG被定义为当前文件夹下的mkconfig文件

SRCTREE		:= $(CURDIR)
MKCONFIG	:= $(SRCTREE)/mkconfig

(@:_config=)等于把目标文件名称_config替换成“”,即itop_4412_android_config_scp_2GDDR

mkconfig分析

通过上述对build_uboot.sh中make config的分析我们可以得出最后调用mkconfig的语句为

mkconfig  itop_4412_android arm arm_cortexa9 smdkc210 samsung s5pc210

对mkconfig的分析见如下的流程图:

在这里插入图片描述

Makefile分析

Uboot原本的Makefile的代码是相当多的(有3800多行),但是其中大部分的代码是与我们的4412使用的Uboot无关的,比如给各种架构的芯片的配置之类的,所以我分析的是讯为经过裁剪的删掉没用的部分的Makefile,有600行左右
分析流程图如下:
在这里插入图片描述

发布了123 篇原创文章 · 获赞 598 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/a568713197/article/details/102618674