?? 嵌入式系統(tǒng)中u-boot基本特點及其移植方法.txt
字號:
引 言
Bootloader(引導裝載器)是用于初始化目標板硬件,
給嵌入式操作系統(tǒng)提供板上硬件資源信息,并進一步裝
載、引導嵌入式操作系統(tǒng)運行的固件。在嵌入式系統(tǒng)開
發(fā)過程中,很多情況都會涉及底層Bootloader的移植問
題, 即使在有些已有Bootloader的參考開發(fā)板上也存在
這種可能。概括來說, 如下情況會考慮進行Bootloader
的移植工作。
① 在自主設(shè)計的目標板上,用于引導嵌入式操作系
統(tǒng)及其應(yīng)用。
② 在廠家未提供Bootloader源碼的參考板上,遇有
如下情形之一:
a.在實際應(yīng)用中需要添加或修改一些功能;
b.為了給自行設(shè)計主板移植BOotlOade r提供參考,先在參考板上進行移植以積累經(jīng)驗。
另外,從嵌入式系統(tǒng)實際開發(fā)角度講, 嵌入式操作系統(tǒng)的引導、配置甚至應(yīng)用程序的運行狀況都和bootloader有一定的關(guān)聯(lián),可以說,掌握Bootloader移植是順利進行嵌入式系統(tǒng)開發(fā)的重要利器。
與常見的嵌入式操作系統(tǒng)板級支持包B S P相比,Boot loader與底層硬件更為相關(guān), 即每個不同配置的目標板基本都有不同的Bootloader。因為Bootloader往往更依據(jù)量體裁衣、定身制作的原則, 以滿足要求的最小化代碼存放在啟動ROM 或Flash中。
雖然,自行編寫B(tài)ootloader未嘗不可,但從可利用的資源和實際項目開發(fā)考慮,采用移植已有的Bootloader源碼來解決這一問題更符合大多數(shù)項目的開發(fā)要求。
1 U-Boot簡介
U—Boot,全稱Universal Boot Loader,是遵循GPL條款的開放源碼項目,從FADSROM、8xxROM 、PPCBOOT逐步發(fā)展演化而來,其源碼目錄、編譯形式與Linux內(nèi)核很相似。事實上,不少U—Boot源碼就是相應(yīng)Linux內(nèi)核源程序的簡化, 尤其是一些設(shè)備的驅(qū)動程序, 從U-Boot源碼的注釋中能體現(xiàn)這一點。但是U-Boot不僅僅支持嵌入式Linux系統(tǒng)的引導, 當前,它還支持NetBSD。VxWorks、QNX、RTEMS、ARTOS、LynxOS嵌入式操作系統(tǒng)。其目前要支持的目標操作系統(tǒng)包括0P enB S D 、NetBSD、FreeBSD、4 4BSD 、Linux、SVR4、Esix、Solaris、Irix、SCO、Dell、NCR、VxWorks、LynxOS、pSOS、QNX、RTEMS和ARTOS。這是u-Boot中Universal的一層含義。另外一層含義則是U-Boot除了支持PowerPC系列的處理器外,還能支持MIPS、x86、ARM 、Nios、XScale等諸多常用系列的處理器。這兩個特點正是U-Boot項目的開發(fā)目標,即支持盡可能多的嵌入式處理器和嵌入式操作系統(tǒng)。就目前來看,U-Boot對PowerPC系列處理器支持最為豐富, 對Linux的支持最完善。其它系列的處理器和操作系統(tǒng)基本是在2002年1 1月PPCBOOT改名為U-Boot 后逐步擴充的。從PPCBOOT向U—Boot的順利過渡,很大程度上歸功于U-Boot的維護人,德國DENX軟件工程中心的Wolfgang Denk(以下簡稱w.D)本人精湛的專業(yè)水平和持著不懈的努力。當前,u-BOOt項目在他的領(lǐng)軍下,眾多有志于開放源碼Boot loader移植工作的嵌入式開發(fā)人員, 正如火如荼地將各個不同系列嵌入式處理器的移植工作不斷展開和深入, 以支持更多嵌入式操作系統(tǒng)的裝載與引導。
2 U-Boot主要目錄結(jié)構(gòu)
board一目標板相關(guān)文件,主要包含SDRAM、Flash驅(qū)動;
common 一獨立于處理器體系結(jié)構(gòu)的通用代碼, 如內(nèi)存大小探測與故障檢測;
cpu一與處理器相關(guān)的文件, 如mpc8xx子目錄下含串口、網(wǎng)口、LCD 驅(qū)動及中斷初始化等文件;
driver一通用設(shè)備驅(qū)動,如CFI Flash驅(qū)動(目前對Intel Flash支持較好)
doc— U.Boot的說明文檔;
examples一可在U—Boot下運行的示例程序;如hello _ world.C,timer.C;
include—— U-Boot頭文件,configs子目錄下與目標板相關(guān)的配置頭文件是移植過程中經(jīng)常要修改的文件;
lib— XXX一處理器體系相關(guān)的文件, 如lib—PPC, lib — arm 目錄分別包含與PowerPC、ARM體系結(jié)構(gòu)相 關(guān)的文件;
net一與網(wǎng)絡(luò)功能相關(guān)的文件目錄,如bootp、nfs、 tftp;
post一上電自檢文件目錄, 尚有待于進一步完善;
rtc— RTC驅(qū)動程序;
tools——用于創(chuàng)建U—Boot S—RECORD和BIN鏡像文件的工具。
3 U-Boot支持的主要功能
U—Boot可支持的主要功能如表1所列。
系統(tǒng)引導 支持NFS掛載、RAMDISK 系統(tǒng)引導 (壓縮或非壓縮)形式的根文件系統(tǒng)
支持NFS掛載,從Flash中引導壓縮或非壓縮系統(tǒng)內(nèi)核
基本輔助 強大的操作系統(tǒng)接口功能,可靈活設(shè)置、傳遞多個關(guān)鍵參數(shù)給操作系統(tǒng), 適合系統(tǒng)在不同開發(fā)階段的調(diào)試要求與產(chǎn)品發(fā)布,尤其對Linux支持最為功能強勁
支持目標板環(huán)境參數(shù)的多種存儲方式,如Flash、NVRAM、EEPROM
CRC32校驗,可校驗Flash中內(nèi)核、RAMDISK鏡像文件是否完好
設(shè)備驅(qū)動 串口、SDRAM、Flash、以太網(wǎng)、LCD、NVRAM、EEPROM、鍵盤、USB、PCMCIA、PCI、RTC等驅(qū)動支持
上電自檢功能 SDRAM、Flash大小自動檢測;SDRAM 故障檢測;CPU型號
特殊功能 XIP內(nèi)核引導
4 U-Boot移植過程
① 獲得發(fā)布的最新版本U—Boot源碼,與Linux內(nèi)核源碼類似,也是bzip2的壓縮格式。可從U.Boot的官方網(wǎng)站http://sourceforge.net/projects/U-Boot上獲得。
② 閱讀相關(guān)文檔,主要是U.Boot源碼根目錄下的README文檔和U—Boot官方網(wǎng)站的DULG(The DENX U—
Boot and Linux Guide)文檔(http:llwww.denx.de/twiki/bin/view/DULG/Manua1)。尤其是DULG文檔,對如何安裝建立交叉開發(fā)環(huán)境和解決U-Boot移植中常見問題,都一一給出了詳盡說明。
③ 訂閱U—Boot用戶郵件列表(http://lists.sourceforge.net/lists/listinfo/u—boot—users)。當在移植U-Boot過程中遇有問題,在參考相關(guān)文檔和搜索u.Boot.U ser郵件檔案庫(httP://SOurceforge.net/mailarchive/forum.php? forum — id=l 2898)仍不能解決時,第一時間提交所遇到的問題, 眾多U-Boot開發(fā)人員會迅速排查問題,而且W.D本人很有可能會直接參與指導。
④ 在建立的開發(fā)環(huán)境下進行移植工作。絕大多數(shù)的開發(fā)環(huán)境是交叉開發(fā)環(huán)境。在這方面,DENX和MontaVi sta均提供了完整的開發(fā)工具集。
⑤ 在目標板與開發(fā)主機間接入硬件調(diào)試器。這是進行U-Boot移植應(yīng)當具備且非常關(guān)鍵的調(diào)試工具。因為在整個U—Boot的移植工作中,尤其是初始階段,硬件調(diào)試器是我們了解目標板真實運行狀態(tài)的唯一途徑。在這方面, W .D 本人和眾多嵌入式開發(fā)人員傾向于使用BDI2000。一方面,其價格不如ICE調(diào)試器昂貴,同時其可靠性高,功能強大, 完全能勝任移植和調(diào)試U—Boot。另外, 網(wǎng)上也有不少關(guān)于BDI2000調(diào)試方面的參考文檔。
⑥ 如果在參考開發(fā)板上移植U—Boot,可能需要移除目標板上已有的Boot loader。可以根據(jù)板上Boot loader的說明文檔,先著手解決在移除當前Boot loader的情況下,如何進行恢復(fù),以便今后在需要場合能重新裝入原先的Boot loader。
5 U-Boot移植方法
當前,對于U.Boot的移植方法,大致分為兩種。一種是先用BDI2000創(chuàng)建目標板初始運行環(huán)境,將U-Boot鏡像
文件u-boot.bin下載到目標板RAM中的指定位置,然后,用BDI2000進行跟蹤調(diào)試。其好處是, 不用將Uboot鏡
像文件燒寫到Fla sh中去。但弊端在于, 對移植開發(fā)人員的移植調(diào)試技能要求較高,BDI2000的配置文件較為復(fù)雜。另外一種方法是用BDI2000先將U—Boot鏡像文件燒寫到Flash中去,然后利用GDB和BDI2000進行調(diào)試。這種方法所用的BDI2000配置文件較為簡單,調(diào)試過程與U-Boot移植后運行過程相吻合。即U—Boot先從Flash中運行,再重載至RAM 中相應(yīng)位置,并從那里正式投入運行。唯一感到有些麻煩的就是需要不斷燒寫Flash。但考慮到Flash常規(guī)擦寫次數(shù)基本為l 0萬次左右,作為移植U-Boot, 不會占用太多的次數(shù),應(yīng)該不會為Flash燒寫有什么擔憂。同時,w.D本人也極力推薦使用后一種方法。筆者建議, 除非是U-BOot移植資深人士或有強有力的技術(shù)支
持, 建議采用第二種移植方法。
6 U-Boot移植主要修改的文件
從移植U—Boot最小要求,U.Boot能正常啟動的角度
出發(fā), 主要考慮修改如下文件。
① <目標板>.h頭文件,如include/con gs/RPxlite.h。可以是U-Boot源碼中已有的目標板頭文件,也可以是新命名的配置頭文件;大多數(shù)的寄存器參數(shù)都是在這一文
件中設(shè)置完成的。
② <目標板>.C文件,如board/RPXlite/RPXlite.C。它是SDRAM 的驅(qū)動程序,主要完成SDRAM 的UPM 表設(shè)
置, 上電初始化。
③ Flash的驅(qū)動程序,如board/RPXlite/flash.C或
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -