1. 程式人生 > >u-boot分析 二 (u-boot目錄結構)

u-boot分析 二 (u-boot目錄結構)

u-boot分析 二

繼前一啟動篇,此博文目的:

學習u-boot的目錄結構,從code架構上對u-boot有一個整體的把握和了解。

一、學習u-boot,得問,什麼是u-boot?

u-boot是一段開源的程式。

Universal Boot Loader,普遍的載入程式。是非常常用的一個載入程式,可作為主流系統的載入程式,如OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris等等,當然同時也支援多種常見的cpu處理器,如MIPS、 x86、ARM、NIOS、XScale等。

u-boot是一種普遍用於嵌入式系統中的Bootloader,Bootloader是在作業系統執行之前執行的一小段程式,通過它,我們可以初始化硬體裝置、建立記憶體空間的對映表,從而建立適當的軟硬體環境,為最終呼叫作業系統核心做好準備。Boot Loader的主要執行任務就是將核心映象從硬碟(e.g. NAND flash or eMMC)上讀到RAM中,然後跳轉到核心的入口點去執行,即開始啟動作業系統。系統在上電或復位時通常都從地址0x00000000處開始執行,而在這個地址處安排的通常就是系統的Boot Loader程式。

二、u-boot目錄結構

u-boot目錄結構,從u-boot-2010.06版本開始,相比老版本

  1. cpu與lib_arch合二為一,命名arch
  2. 增加include folder
  3. 分離出通用庫資料夾lib

u-boot-2010.06及以後版本,基本目錄結構如下表

Name Description
api 此目錄下存放u-boot向外提供的介面函式
arch 與體系結構相關的程式碼,核心folder。s5p4418是arm體系結構。
board 此folder是根據不同的具體開發板而定製的程式碼,程式碼也不少
common 通用程式碼,涵蓋各個方面,以命令列處理為主
disk 磁碟分割槽相關程式碼
doc 常見功能和問題的說明文件,一堆README開頭的檔案
drivers 常用的裝置驅動程式,每個型別的裝置驅動佔用一個子目錄
examples 示例程式
fs 檔案系統,支援嵌入式開發常見的fs(cramfs,ext2,ext3,jffs2,etc)
include 全域性需要的標頭檔案定義在這兒
lib 通用庫檔案
net 網路相關的程式碼,小型的協議棧
post Power On Self Test,開店自檢
Tools 輔助程式,用於編譯和檢查uboot目標檔案

自問,學習u-boot又是為何?
無可厚非,很大機會是為了移植u-boot到自己的開發板。
如此,我們就不得不再分析/arch,/board兩個folder

/arch
這裡寫圖片描述

每一個folder對應一個體繫結構,如/arm便是本文涉及到的體系結構。進入/arch/arm
這裡寫圖片描述
注,此圖截自博主分享的u-boot source code,該code已經將不相干的arch folder移除,只留下了arm folder,以方便大家更好的學習。

  1. cpu子目錄對應一種處理器的不同產品型號或者系列;
  2. include子目錄是處理器用到的標頭檔案;
  3. lib目錄對應用到處理器公用的程式碼;

繼續展開cpu資料夾,即/arch/arm/cpu/slsiap/s5p4418/
這裡寫圖片描述

其中,start.s檔案是整個u-boot程式碼的入口點。

/board
這裡寫圖片描述

此圖截自u-boot官網下載的source code,可見裡面有非常多的現成的開發板配置,非常壯觀。而我們的示例並不包括在其內,所以,再回看博主在上一篇文章中分享的source code(http://pan.baidu.com/s/1kUhYmEj) 。為方便學習,只留下了相關的檔案和資料夾/u-boot/board/s5p4418/…

我們總結一下,從目錄結構上看,u-boot包括兩個經常需要動到的/arch和/board目錄,和另外一些暫不會動到的folders。作為初學,或者還沒有涉及到u-boot裁剪的話,我們盡力搞清楚前兩個folder的code原理即可搞明白u-boot的工作流程。

最後,u-boot.lds

還有一個檔案是必須要知道的,即u-boot/arch/arm/cpu/slsiap/u-boot.lds

u-boot.lds是ld程式也就是聯結器的指令碼檔案,這個檔案描述瞭如何連線目標檔案,ld程式會根據這個檔案的指示按照需求把不同的目標檔案連線在一起生成供燒寫到開發板的image。

回溯本文,

  1. 什麼是u-boot?
  2. u-boot目錄結構?
  3. u-boot.lds是幹什麼的?