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行左右
分析流程圖如下:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章