基于PxA255的U-B00t啟動分析及移植
摘要:Bootloader在嵌入式系統中是必不可少的重要組成部分,這里使用U-Boot 1.3.O在基于PXA255的嵌入式系統上,構建引導加載程序。在對目標板的硬件資源進行簡要說明之后,詳細分析了U-Boot的啟動流程;接著從參考板的選擇、目標板支持文件的建立和相關代碼的修改,闡述移植的全過程;最后給出了編譯和調試的方法。結果表明,U-Boot能穩定地運行。將U-Boot移植到自制的以PXA255為處理器的目標板上,并能成功引導Linux內核,該目標板已經應用于無線傳感器網絡的匯聚節點,取得了良好的效果。
關鍵詞:U-Boot;PXA255;Bootloader;嵌入式系統;軟件移植
0 引 言
Bootloader是操作系統運行之前執行的一小段程序,用來初始化硬件設備,建立一個系統空間映射圖和一個適當的系統軟硬件環境。最終Bootloader把操作系統內核映像加載到RAM中。并將系統控制權交給內核。
U-Boot被認為是功能最多,最具彈性以及開發最積極的開放源碼Bootloader。U-Boot已經能夠支持PowerPC,ARM,X86和MIPS體系結構的上百種開發板,U-Boot還具有通過TFTP,從IDE或SCSI磁盤以及DOc啟動的能力,還提供了JFFS2的只讀功能。正是由于U-Boot較高的可靠性和穩定性;高度靈活的功能設置;豐富的設備驅動程序和豐富的開發和調試文檔,因此選擇U-Boot作為目標板的Boot-loader。
對于嵌入式系統,Bootloader是基于特定的硬件來實現的,因此建立一個通用的。Bootloader是不可能的,要使Bootloader能在目標板上運行,必須做出相應的修改。
l 目標板
目標板采用Intel PXA255處理器,頻率最高可達400 MHz,配置了32 MB的FLASH(Intel StrataFLASH)和64 MB的SDRAM(Samsung),網卡采用LAN91C96。板上有JTAG口、串口和網口,可分別完成程序的下載和調試工作。目標板的主要硬件資源如圖1所示。
2 U-Boot啟動過程分析
充分理解代碼的啟動流程,對于準確地判斷出移植過程中出錯的原因和出錯的位置具有重要的作用。
2.1 U-Boot啟動的入口點
一個可執行的Image必須有一個入口點,并且只能有一個全局入口。可執行Image的入口一般通過鏈接腳本文件來實現,鏈接腳本主要用于規定如何把文件內的section放入輸出映像文件內,并控制輸出文件內各個部分在程序地址空間內的分布。鏈接腳本文件位于board目錄下的各個開發板目錄。
以U-Boot支持的開發板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體系結構的代碼,通常用匯編語言實現,放在stagel;而stage2則通常用C語言來實現,這樣可以實現復雜的功能,而且有更好的可讀性和移植性。
根據對鏈接腳本文件和源代碼的分析,U-Boot的啟動過程中函數調用的順序如圖2所示。
2.2.1 stagel部分
U-Boot的stagel代碼從人口函數start.S開始,它用匯編語言寫成,主要完成的工作為:設置異常向量;設置CPu的速度、時鐘頻率及中斷控制寄存器;初始化內存控制器;將ROM中的程序復制到RAM中;初始化堆棧;轉到RAM中執行。
評論