繼前一啟動(dòng)篇,此博文目的:
學(xué)習(xí)u-boot的目錄結(jié)構(gòu),從code架構(gòu)上對(duì)u-boot有一個(gè)整體的把握和了解。
一、學(xué)習(xí)u-boot,得問,什么是u-boot?
u-boot是一段開源的程序。
Universal Boot Loader,普遍的引導(dǎo)程序。是非常常用的一個(gè)引導(dǎo)程序,可作為主流系統(tǒng)的引導(dǎo)程序,如OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, Solaris等等,當(dāng)然同時(shí)也支持多種常見的cpu處理器,如MIPS、 x86、ARM、NIOS、XScale等。
u-boot是一種普遍用于嵌入式系統(tǒng)中的Bootloader,Bootloader是在操作系統(tǒng)運(yùn)行之前執(zhí)行的一小段程序,通過它,我們可以初始化硬件設(shè)備、建立內(nèi)存空間的映射表,從而建立適當(dāng)?shù)能浻布h(huán)境,為最終調(diào)用操作系統(tǒng)內(nèi)核做好準(zhǔn)備。Boot Loader的主要運(yùn)行任務(wù)就是將內(nèi)核映象從硬盤(e.g. NAND flash or eMMC)上讀到RAM中,然后跳轉(zhuǎn)到內(nèi)核的入口點(diǎn)去運(yùn)行,即開始啟動(dòng)操作系統(tǒng)。系統(tǒng)在上電或復(fù)位時(shí)通常都從地址0x00000000處開始執(zhí)行,而在這個(gè)地址處安排的通常就是系統(tǒng)的Boot Loader程序。
二、u-boot目錄結(jié)構(gòu)
u-boot source code,無論是從網(wǎng)絡(luò)下載(ftp://ftp.denx.de/pub/u-boot/)還是來自上一篇博客分享(http://pan.baidu.com/s/1kUhYmEj) ,第一次映入眼簾的風(fēng)景基本是這樣的:
u-boot目錄結(jié)構(gòu),從u-boot-2010.06版本開始,相比老版本
u-boot-2010.06及以后版本,基本目錄結(jié)構(gòu)如下表
Name | Description |
---|---|
api | 此目錄下存放u-boot向外提供的接口函數(shù) |
arch | 與體系結(jié)構(gòu)相關(guān)的代碼,核心folder。s5p4418是arm體系結(jié)構(gòu)。 |
board | 此folder是根據(jù)不同的具體開發(fā)板而定制的代碼,代碼也不少 |
common | 通用代碼,涵蓋各個(gè)方面,以命令行處理為主 |
disk | 磁盤分區(qū)相關(guān)代碼 |
doc | 常見功能和問題的說明文檔,一堆README開頭的文件 |
drivers | 常用的設(shè)備驅(qū)動(dòng)程序,每個(gè)類型的設(shè)備驅(qū)動(dòng)占用一個(gè)子目錄 |
examples | 示例程序 |
fs | 文件系統(tǒng),支持嵌入式開發(fā)常見的fs(cramfs,ext2,ext3,jffs2,etc) |
include | 全局需要的頭文件定義在這兒 |
lib | 通用庫(kù)文件 |
net | 網(wǎng)絡(luò)相關(guān)的代碼,小型的協(xié)議棧 |
post | Power On Self Test,開店自檢 |
Tools | 輔助程序,用于編譯和檢查uboot目標(biāo)文件 |
自問,學(xué)習(xí)u-boot又是為何?
無可厚非,很大機(jī)會(huì)是為了移植u-boot到自己的開發(fā)板。
如此,我們就不得不再分析/arch,/board兩個(gè)folder
/arch
每一個(gè)folder對(duì)應(yīng)一個(gè)體系結(jié)構(gòu),如/arm便是本文涉及到的體系結(jié)構(gòu)。進(jìn)入/arch/arm
繼續(xù)展開cpu文件夾,即/arch/arm/cpu/slsiap/s5p4418/
其中,start.s文件是整個(gè)u-boot代碼的入口點(diǎn)。
/board
此圖截自u(píng)-boot官網(wǎng)下載的source code,可見里面有非常多的現(xiàn)成的開發(fā)板配置,非常壯觀。而我們的示例并不包括在其內(nèi),所以,再回看博主在上一篇文章中分享的source code(http://pan.baidu.com/s/1kUhYmEj) 。為方便學(xué)習(xí),只留下了相關(guān)的文件和文件夾/u-boot/board/s5p4418/…
我們總結(jié)一下,從目錄結(jié)構(gòu)上看,u-boot包括兩個(gè)經(jīng)常需要?jiǎng)拥降?arch和/board目錄,和另外一些暫不會(huì)動(dòng)到的folders。作為初學(xué),或者還沒有涉及到u-boot裁剪的話,我們盡力搞清楚前兩個(gè)folder的code原理即可搞明白u(yù)-boot的工作流程。
最后,u-boot.lds
還有一個(gè)文件是必須要知道的,即u-boot/arch/arm/cpu/slsiap/u-boot.lds
u-boot.lds是ld程序也就是連接器的腳本文件,這個(gè)文件描述了如何連接目標(biāo)文件,ld程序會(huì)根據(jù)這個(gè)文件的指示按照需求把不同的目標(biāo)文件連接在一起生成供燒寫到開發(fā)板的image。
回溯本文,
完
聯(lián)系客服