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 source code,無論是從網絡下載(ftp://ftp.denx.de/pub/u-boot/)還是來自上一篇博客分享(http://pan.baidu.com/s/1kUhYmEj) ,第一次映入眼簾的風景基本是這樣的:
u-boot目錄結構,從u-boot-2010.06版本開始,相比老版本
- cpu與lib_arch合二爲一,命名arch
- 增加include folder
- 分離出通用庫文件夾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,以方便大家更好的學習。
- cpu子目錄對應一種處理器的不同產品型號或者系列;
- include子目錄是處理器用到的頭文件;
- 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。
回溯本文,
- 什麼是u-boot?
- u-boot目錄結構?
- u-boot.lds是幹什麼的?
完