<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 基于Intel PXA272的Bootloader的設計與實(shí)現

基于Intel PXA272的Bootloader的設計與實(shí)現

作者: 時(shí)間:2007-06-05 來(lái)源:網(wǎng)絡(luò ) 收藏

摘要:在嵌入式系統中,在完成引導加載系統鏡像的同時(shí),擴展和增加了具體硬件模塊上的功能支持,以方便開(kāi)發(fā)人員進(jìn)行開(kāi)發(fā)和調試。這篇文章在嵌入式處理器的一個(gè)硬件平臺上,了一個(gè)支持從SD卡加載系統鏡像并啟動(dòng)系統的bootloader,并對其加載性能進(jìn)行測試和分析。
關(guān)鍵詞,嵌入式處理器,WinCE操作系統,SD卡

1前言

PC機中的引導程序一般由BIOS和位于MBR的OS (例如LILO或者GRUB)一起組成。然而在嵌入式系統中通常沒(méi)有像BIOS那樣的固件程序(有的嵌入式CPU有),因此整個(gè)系統的加載啟動(dòng)任務(wù)就完全由Bootloader來(lái)完成。但是隨著(zhù)嵌入式系統的發(fā)展,Bootloader已經(jīng)逐漸在基本功能的基礎上進(jìn)行了擴展,Bootloader可以更多地增加對具體系統的板級支持,即增加一些硬件模塊功能上的使用支持,以方便開(kāi)發(fā)人員進(jìn)行開(kāi)發(fā)和調試。編寫(xiě)BootLoader是開(kāi)發(fā)WinCE系統第一步,也是關(guān)鍵的一步。只有得到一個(gè)穩定工作的Loader程序,才能夠更進(jìn)一步開(kāi)發(fā)WinCE的BSP,直至最后整個(gè)系統的成功?!?】

2硬件平臺結構

我們的硬件平臺采用PXA 272 作為處理器,工作頻率為512M HZ,內部集成了64 M bytes NOR Flash。 PXA27X處理器是公司推出的32位,Xscale架構的高性能的嵌入式芯片?!?】硬件平臺結構中主要還包括了如下的主要器件:128 M SDRAM、AC97 codec、 LCD 控制器、IrDa芯片、藍牙UART、USB控制器。另外還集成了3.5肌240320 QVGA的TFT-LCD 觸摸屏、PCMCIA、SD/MMC等外設接口,WLAN模塊。

Intel的PXA 27X內部支持SD Host的控制模塊,有SD Host控制寄存器和可以用于SD Host控制器的IO引腳,可用編程的方法對其功能進(jìn)行選擇;但對于SD卡的檢測,寫(xiě)保護和插槽的電源使能

等功能沒(méi)有專(zhuān)門(mén)的引腳。在本文中,對于卡檢測、電源引腳,通過(guò)GPIO擴展來(lái)。和SD卡硬件相關(guān)的部分引腳定義如表1所示:【3】【4】

表1 PXA 272部分GPIO引腳功能定義

信號

方向

Intel 272功能引腳

說(shuō)明

SD_nPWREN

輸入

SDPWEN/GPB2

SD插槽電源使能信號線(xiàn)

SD_DATA3

輸入/輸出

SDDATA0/GPF5

4bit模式:DATA3

SD_DATA2

輸入/輸出

SDDATA0/GPF4

4bit模式:DATA2

SD_DATA1

輸入/輸出

SDDATA0/GPE5

4bit模式:DATA1

SD_DATA0

輸入/輸出

SDDATA0/GPG2

4bit模式:DATA0

SD_CMD

輸入/輸出

SDCMD/GPG1

SD命令線(xiàn)

SD_CLK

輸入

SDCLK/GPF3

SDIO/SD卡時(shí)鐘線(xiàn)

SD_nCD

輸出

EINT23/GPF1

SD卡檢測引腳

SD_WP

輸出

GPC3

SD卡寫(xiě)保護引腳

3Bootloader的和實(shí)現

一個(gè)嵌入式WinCE系統從軟件的角度看通??梢苑譃閮刹糠郑築ootloader 和 Wince嵌入式系統。從Bootloader和Wince嵌入式系統的關(guān)系看,Bootloader包含兩種不同的操作模式:“本地啟動(dòng)”模式和“下載啟動(dòng)”模式?!?】在本地啟動(dòng)模式下Bootloader從Flash上將Wince操作系統加載到RAM中運行。在下載啟動(dòng)模式下,目標機上的Bootloader將通過(guò)串口或者網(wǎng)絡(luò )連接或者USB等從主機下載操作系統文件,也可以直接從SD/MMC卡、CF卡上加載操作系統鏡像文件。在下載啟動(dòng)模式下,Bootloader通過(guò)串口給用戶(hù)提供簡(jiǎn)單的命令行接口。

3.1Bootloader的流程

當系統上電后,ARM CPU會(huì )從物理地址零處開(kāi)始執行第一條指令的執行,通常會(huì )在該地址處放置一條跳轉指令。在我們的硬件平臺中物理地址零是64M Flash的物理起始地址。這里值得需要說(shuō)明的是64M Flash 是固化在Intel PXA 272中的。所以我們的Bootloader燒入也必須從Flash的物理地址零開(kāi)始。Bootloader二進(jìn)制文件的最前面的4個(gè)字節就是一條跳轉指令。

圖1 Bootloader 流程圖

接著(zhù)系統會(huì )跳轉到一段用ARM匯編編寫(xiě)的代碼中去執行。其作用是完成系統啟動(dòng)所必須的最小配置,例如配置cpu的工作頻率,配置GPIO,配置時(shí)鐘等。然后為我們處理器的工作模式設置棧指針。

接著(zhù)把Bootloader從Flash搬運到SDRAM中,配置MMU,創(chuàng )建頁(yè)表,使能MMU,然后把自己后半部重定位到SDRAM中去執行。在后半部的執行中會(huì )根據用戶(hù)做的動(dòng)作(是否按住一個(gè)按鈕)來(lái)判斷是要本地啟動(dòng)還是下載啟動(dòng)。具體的流程圖如圖1所示。

當用戶(hù)選擇特定下載啟動(dòng)方式后,就進(jìn)入具體的下載流程。首先需要對用戶(hù)選定的介質(zhì)的硬件進(jìn)行必要的初始化。之前做的一些硬件的初始化是不夠的,因為沒(méi)必要在前面進(jìn)行全面的硬件初始化,現在要具體使用了就需要進(jìn)行具體的配置。

3.2軟件實(shí)現的關(guān)鍵

Bootloader是依賴(lài)于硬件而實(shí)現的,特別是在嵌入式系統中。不同的體系結構需求的Bootloader是不同的;除了體系結構,Bootloader還依賴(lài)于具體的嵌入式板級設備的配置。所以根據不同的板級配置需要修改相應的Bootloader?!?】我們使用的bootloader是Microsoft提供的和Wince配套的Eboot。下面幾點(diǎn)是在我們的硬件平臺上修改Eboot的關(guān)鍵。

3.2.1配置內存映射表

WinCE嵌入式系統通過(guò)定義OEMAddressTable來(lái)定義虛擬內存到物理內存的映射表.這個(gè)表在我們的實(shí)現中是bootloader和WinCE系統公用的?!?】當然這不是強制性的.我們需要根據硬件平臺的不同定制自己的映射表。在我們的中,這個(gè)表把4GB的物理空間映射到512M的內核虛擬空間。

表中的每一項由虛擬地址,物理地址,和映射的M數組成。其格式如下所示

OEMAddressTable

DCD SDRAM_BASE_C_VIRTUAL, SDRAM_BASE_PHYSICAL, 64

DCD SDRAM1_BASE_C_VIRTUAL, SDRAM1_BASE_PHYSICAL, 64

DCD IM_STORAGE_BASE_C_VIRTUAL, IM_STORAGE_BASE_PHYSICAL, 1

.....

DCD 0x00000000, 0x00000000, 0

第一項和第二項分別使64M的虛擬地址映射到64M物理地址,因為我們采用兩條64M的SDRAM。第二項使1M的內部?jì)却娴奶摂M地址映射到物理地址,因為我們使用1M大小的內部存儲。最后一項必須是零,因為建立頁(yè)表的時(shí)候程序通過(guò)它來(lái)判斷是否結束映射過(guò)程。在配置MMU的時(shí)候會(huì )使用這個(gè)表來(lái)完成虛擬地址到物理地址的映射的頁(yè)表的建立。

3.2.2 為中斷模式設置分配堆棧

我們知道ARM的堆棧是分模式的,在程序中要為每種要用到的模式分配堆棧。如果沒(méi)有為某種模式分配堆棧,那么在進(jìn)入這種模式之后系統不能繼續運行了。系統首先運行在SVC模式。在下載模式中,我們要通過(guò)USB ,網(wǎng)絡(luò ),SD/MMC和CF接口等下載文件,而這些都要用到中斷。所以我們要為中斷模式分配堆棧,其代碼片段如下:

ldr r2, =(Mode_IRQ :OR: NoIntsMask) ;中斷模式

msr cpsr_c,r2

ldr sp,=(EBOOT_IRQ_STACK_TOP+SDRAM_VIR_C_EBOOT_PARTITION) ;分配堆棧

在為中斷模式分配堆棧之后,還要進(jìn)行堆棧切換,使程序重新回到SVC模式運行。

3.2.3 通過(guò)SD卡加載系統鏡像的實(shí)現

當用戶(hù)選取SD卡作為下載系統鏡像的目標后,bootloader就進(jìn)入對SD處理的流程。首先通過(guò)SD卡檢測引腳判斷是否有SD卡插在插槽。如果有就要對SD控制的硬件進(jìn)行初始化,例如SD插槽電源使能,設置時(shí)鐘,設置功能GPIO等。

其中需要說(shuō)明的是Intel PXA 272的時(shí)鐘管理比較復雜,它有兩個(gè)鎖相環(huán)路PLL:外圍設備鎖相環(huán)路,核心鎖相環(huán)路。其中外圍設備鎖相環(huán)路為外圍總線(xiàn)和USBC,I2S接口,SD接口等外圍設備提供時(shí)鐘。在時(shí)鐘控管理寄存器里,寄存器CKEN用來(lái)控制如USB,UART,SD等接口模塊的時(shí)鐘使能?!?】

接著(zhù)是對SD卡協(xié)議棧的軟件實(shí)現.為了減少Bootloader中SD Host驅動(dòng)的復雜性,能夠易于調試,實(shí)現了總線(xiàn)驅動(dòng)模塊,客戶(hù)端驅動(dòng)模塊和FAT16文件系統模塊。所以在我們的實(shí)現中對SD卡上的文件系統要有一定的限制,必須是格式化成FAT16的文件系統才能被我們的bootloader識別。當然在具體的實(shí)現中我們還可以使用另外的文件系統格式。其協(xié)議棧結構如圖2所示:

圖2 SD卡協(xié)議棧結構

3.3實(shí)驗結果

我們使用一個(gè)22.7M的WinCE鏡像,在Bootloader中分別用USB,SD卡,TFTP,本地四種方式使用進(jìn)行加載啟動(dòng)測試,分別測試了50次。因為在Bootloader中SD Host的實(shí)現沒(méi)有使用DMA方式,為了進(jìn)行性能比較,我們又調用WinCE系統下使用DMA的SD Host驅動(dòng)加載同樣大小的文件進(jìn)行了50次測試。表2是我們測試的結果。表中數據為平均值。
表2 測試結果

SD卡

USB

TFTP

使用DMA的SD

本地啟動(dòng)

加載時(shí)間(秒)

51

96

53

28

3

從表中數據可知,本地啟動(dòng)是最快的,這是不容置疑的。其次是通過(guò)SD卡啟動(dòng)。另外值得說(shuō)明的是,通過(guò)USB和TFTP下載啟動(dòng)在都需要的在通信的另一端軟件的支持和用戶(hù)的介入操作。而SD卡的數據通信傳輸完全由硬件實(shí)現,這也是SD卡加載相對比較快的主要原因。而且使用TFTP下載還需要進(jìn)行相對復雜的配置。而在使用SD的加載中Bootloader會(huì )自動(dòng)去搜尋系統鏡像,自動(dòng)下載。這對用戶(hù)的使用來(lái)說(shuō)是方便快捷的。

另外從使用DMA的SD 驅動(dòng)下載文件和Bootloader中的實(shí)現做比較,可以看出使用DMA后大大提高了使用SD下載的性能。當然我們也可以在Bootloader中使用DMA方式來(lái)實(shí)現以提高性能。但這樣一來(lái)會(huì )大大增加Bootloader的復雜性。我們在Bootloader中實(shí)現使用SD做加載啟動(dòng)的主要目的是方便開(kāi)發(fā)和調試SD硬件模塊,而且實(shí)際使用中絕大部分會(huì )是本地啟動(dòng)。我們的實(shí)現中目的已經(jīng)達到,所以可以不考慮這些。

4 結束語(yǔ)

Bootloader是操作系統和硬件的樞紐,相對于操作系統內核來(lái)說(shuō)它是一個(gè)硬件抽象層。嵌入式領(lǐng)域中操作系統的移植關(guān)鍵在于Bootloader的移植和操作系統內核硬件相關(guān)部分移植。所設計并實(shí)現的Intel PXA 272嵌入式處理器的從SD卡加載并啟動(dòng)WinCE系統的Bootloader能提高WinCE操作系統移植的穩定性并加快WinCE操作系統移植的周期。

本文作者創(chuàng )新點(diǎn): 在基于Intel PXA 272 處理器的bootloader中實(shí)現了SD卡的協(xié)議棧,并實(shí)現了從SD卡加載并啟動(dòng)WinCE嵌入式系統鏡像的功能.

參考文獻:
【1】杜春雷.ARM體系結構與編程.北京:清華大學(xué)出版社,2004-12
【2】Intel PXA 27X Processor Family Developer's Manual[M]. Intel, 2004-04
【3】Jörg Henkel, Xiaobo Sharon Hu, Shuvra S. Bhattacharyya. Taking on the Embedded System Design Challenge[J], IEEE Computer (4): 35-37 (2003)【4】SD-Memory Card Specifications /Part1 Physical Layer Specification Version 1.01[M]. SD Group, 2001
【5】陳向群王雷 馬洪兵.Windows.CE.NET 系統分析及實(shí)驗教程.北京:機械工業(yè)出版社,2003
【6】萬(wàn)永波 張根寶 田澤 楊峰. 基于A(yíng)RM的嵌入式系統Bootloader啟動(dòng)流程分析.微計算機信息. 2005年第11-2期.第一頁(yè)



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>