基于PXA255的嵌入式Linux應用平臺的構建
1 引言
嵌入式Linux(Embedded Linux)是指對Linux經(jīng)過(guò)小型化裁剪后,能夠固化在容量?jì)H有幾十萬(wàn)字節的存儲器芯片或單片機中,應用于特定嵌入式場(chǎng)合的專(zhuān)用Linux操作系統。嵌入式Linux是由很多體積小且性能高的微內核系統組成,在內核代碼完全開(kāi)放的前提下,不同領(lǐng)域和不同層次的用戶(hù)可以根據自己的應用需要很容易地對內核進(jìn)行改造,在低成本的前提下,設計和開(kāi)發(fā)出真正滿(mǎn)足自己需要的嵌入式系統。
隨著(zhù)電子市場(chǎng)的發(fā)展壯大,高性能低功耗的多媒體手提設備和無(wú)線(xiàn)設備越來(lái)越受到市場(chǎng)的歡迎,Intel XScale PXA255處理器正是針對這一情況推出的。它采用Intel XScale微結構體系框架,采用ARMV5TE的7級超流水線(xiàn),可以工作在200MHz、300MHz、400MHz下,集成了許多常用的外圍接口,功能強大。本文將介紹如何在Intel XScale PXA255上構建嵌入式Linux應用平臺。
一個(gè)嵌入式Linux系統的構建由以下步驟組成:加載Bootloader引導程序、交叉編譯環(huán)境下加載和編譯Linux內核和與之配套的根文件系統等,下面就逐步介紹各個(gè)步驟的實(shí)現情況。
2.1 加載Bootloader引導程序
Bootloader引導程序是系統加電啟動(dòng)后運行的第一段軟件代碼?;貞浺幌翽C的體系結構我們可以知道,PC機中的引導加載程序由BIOS(其本質(zhì)就是一段固件程序)和位于硬盤(pán)MBR中的引導程序一起組成。而在嵌入式系統中,通常并沒(méi)有像BIOS那樣的固件程序,因此整個(gè)系統的加載啟動(dòng)任務(wù)就完全由Bootloader來(lái)完成。Bootloader的啟動(dòng)流程一般分為兩個(gè)階段:stage1和stage2。在 stage1中的代碼通常用匯編語(yǔ)言實(shí)現,以提高系統運行的效率,而stage2中通常用C語(yǔ)言實(shí)現,目的是實(shí)現更復雜的功能和取得更好的代碼可讀性和可移植性。
在stage1中Bootloader主要完成以下工作:
項目基金:國家自然科學(xué)基金(50678099)
(1)基本的硬件初始化。
(2)為加載stage2準備RAM空間。
(3)拷貝stage2到RAM空間中。
(4)設置堆棧指針sp,這是為執行stage2的C語(yǔ)言代碼做好準備。
在stage2中Bootloader主要完成以下工作:(1)用匯編語(yǔ)言跳轉到main入口函數。(2)初始化本階段要使用到的硬件設備。(3)檢測系統的內存映射。(4)加載內核映像和根文件系統映像。(5)設置內核的啟動(dòng)參數。
本平臺中的Bootloader選擇的是U-Boot(Universal Bootloader),是遵循GPL條款的開(kāi)放源碼項目。其源碼目錄、編譯形式與Linux內核很相似,事實(shí)上,不少U-Boot源碼就是相應的 Linux內核源程序的簡(jiǎn)化,尤其是一些設備的驅動(dòng)程序,這從U-Boot源碼的注釋中就能體現這一點(diǎn)。就目前為止,U-Boot對PowerPC系列處理器支持最為豐富,對Linux的支持最完善。
在http://sourceforge.net/projects/u-boot下下載最新版本的U-Boot,移植之前需要仔細閱讀u-boot目錄下的readme文件,其中對如何移植做了簡(jiǎn)要的介紹。為了減少移植的工作量,可以在include / config目錄下選一個(gè)和要移植的硬件相同或相似的開(kāi)發(fā)板,根據硬件平臺的配置情況和參考現有的源碼,對配置文件進(jìn)行修改和配置,如修改和配置 FLASH信息、SDRAM信息、網(wǎng)絡(luò )配置、處理器配置、中斷、開(kāi)發(fā)版參數設置等。之后用make命令生成映像文件下載并燒寫(xiě)到FLASH中。
2.2 交叉編譯環(huán)境下加載和編譯Linux內核
2.2.1 建立交叉編譯環(huán)境
所謂交叉編譯是指當主機系統和目標系統的體系結構與操作系統不兼容時(shí),將在主機系統上編譯的可執行程序應用到目標系統上運行的編譯方法。嵌入式系統通常是一個(gè)資源受限的系統,因此直接在嵌入式系統的硬件平臺上編寫(xiě)軟件比較困難,有時(shí)候甚至是不可能的。所以需要建立交叉編譯環(huán)境,下載hybus- arm-linux-R1.1.tar.gz到/usr/local目錄下。
評論