基于PxA255的U-B00t啟動分析及移植
摘要:Bootloader在嵌入式系統(tǒng)中是必不可少的重要組成部分,這里使用U-Boot 1.3.O在基于PXA255的嵌入式系統(tǒng)上,構(gòu)建引導(dǎo)加載程序。在對目標(biāo)板的硬件資源進(jìn)行簡要說明之后,詳細(xì)分析了U-Boot的啟動流程;接著從參考板的選擇、目標(biāo)板支持文件的建立和相關(guān)代碼的修改,闡述移植的全過程;最后給出了編譯和調(diào)試的方法。結(jié)果表明,U-Boot能穩(wěn)定地運(yùn)行。將U-Boot移植到自制的以PXA255為處理器的目標(biāo)板上,并能成功引導(dǎo)Linux內(nèi)核,該目標(biāo)板已經(jīng)應(yīng)用于無線傳感器網(wǎng)絡(luò)的匯聚節(jié)點(diǎn),取得了良好的效果。
關(guān)鍵詞:U-Boot;PXA255;Bootloader;嵌入式系統(tǒng);軟件移植
0 引 言
Bootloader是操作系統(tǒng)運(yùn)行之前執(zhí)行的一小段程序,用來初始化硬件設(shè)備,建立一個系統(tǒng)空間映射圖和一個適當(dāng)?shù)南到y(tǒng)軟硬件環(huán)境。最終Bootloader把操作系統(tǒng)內(nèi)核映像加載到RAM中。并將系統(tǒng)控制權(quán)交給內(nèi)核。
U-Boot被認(rèn)為是功能最多,最具彈性以及開發(fā)最積極的開放源碼Bootloader。U-Boot已經(jīng)能夠支持PowerPC,ARM,X86和MIPS體系結(jié)構(gòu)的上百種開發(fā)板,U-Boot還具有通過TFTP,從IDE或SCSI磁盤以及DOc啟動的能力,還提供了JFFS2的只讀功能。正是由于U-Boot較高的可靠性和穩(wěn)定性;高度靈活的功能設(shè)置;豐富的設(shè)備驅(qū)動程序和豐富的開發(fā)和調(diào)試文檔,因此選擇U-Boot作為目標(biāo)板的Boot-loader。
對于嵌入式系統(tǒng),Bootloader是基于特定的硬件來實(shí)現(xiàn)的,因此建立一個通用的。Bootloader是不可能的,要使Bootloader能在目標(biāo)板上運(yùn)行,必須做出相應(yīng)的修改。
l 目標(biāo)板
目標(biāo)板采用Intel PXA255處理器,頻率最高可達(dá)400 MHz,配置了32 MB的FLASH(Intel StrataFLASH)和64 MB的SDRAM(Samsung),網(wǎng)卡采用LAN91C96。板上有JTAG口、串口和網(wǎng)口,可分別完成程序的下載和調(diào)試工作。目標(biāo)板的主要硬件資源如圖1所示。
2 U-Boot啟動過程分析
充分理解代碼的啟動流程,對于準(zhǔn)確地判斷出移植過程中出錯的原因和出錯的位置具有重要的作用。
2.1 U-Boot啟動的入口點(diǎn)
一個可執(zhí)行的Image必須有一個入口點(diǎn),并且只能有一個全局入口。可執(zhí)行Image的入口一般通過鏈接腳本文件來實(shí)現(xiàn),鏈接腳本主要用于規(guī)定如何把文件內(nèi)的section放入輸出映像文件內(nèi),并控制輸出文件內(nèi)各個部分在程序地址空間內(nèi)的分布。鏈接腳本文件位于board目錄下的各個開發(fā)板目錄。
以U-Boot支持的開發(fā)板1ubbock為例,查看鏈接腳本board/lubbock/u-boot.lds,就可以知道各個部分的鏈接順序。這個連接腳本決定了U-Boot的第一階段的代碼是從0xO開始的,入口由_start符號指定(ENTRY(_start)),第一個鏈接的文件是cup/pxa/start.o,那么U-Boot的入口指令一定位于這個程序中。
2.2 U-Boot的啟動步驟
U―Boot的啟動一般分為stagel和stage2兩個部分。依賴于CPU體系結(jié)構(gòu)的代碼,通常用匯編語言實(shí)現(xiàn),放在stagel;而stage2則通常用C語言來實(shí)現(xiàn),這樣可以實(shí)現(xiàn)復(fù)雜的功能,而且有更好的可讀性和移植性。
根據(jù)對鏈接腳本文件和源代碼的分析,U-Boot的啟動過程中函數(shù)調(diào)用的順序如圖2所示。
2.2.1 stagel部分
U-Boot的stagel代碼從人口函數(shù)start.S開始,它用匯編語言寫成,主要完成的工作為:設(shè)置異常向量;設(shè)置CPu的速度、時鐘頻率及中斷控制寄存器;初始化內(nèi)存控制器;將ROM中的程序復(fù)制到RAM中;初始化堆棧;轉(zhuǎn)到RAM中執(zhí)行。
評論