日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

基于Intel PXA272的Bootloader的設計與實現

系統 1938 0

來源:微計算機信息  作者:陳紅展 吳非 封仲淹 李錫武

摘要: 在嵌入式系統中,Bootloader在完成引導加載系統鏡像的同時,擴展和增加了具體硬件模塊上的功能支持,以方便開發人員進行開發和調試。這篇文章在基于Intel PXA 272嵌入式處理器的一個硬件平臺上,設計并實現了一個支持從SD卡加載系統鏡像并啟動系統的bootloader,并對其加載性能進行測試和分析。
關鍵詞: Bootloader,嵌入式處理器,WinCE操作系統,SD卡
1 前言
PC機中的引導程序一般由BIOS和位于MBR的OS Bootloader(例如LILO或者GRUB)一起組成。然而在嵌入式系統中通常沒有像BIOS那樣的固件程序(有的嵌入式CPU有),因此整個系統的加載啟動任務就完全由Bootloader來完成。但是隨著嵌入式系統的發展,Bootloader已經逐漸在基本功能的基礎上進行了擴展,Bootloader可以更多地增加對具體系統的板級支持,即增加一些硬件模塊功能上的使用支持,以方便開發人員進行開發和調試。編寫 BootLoader是開發WinCE系統第一步,也是關鍵的一步。只有得到一個穩定工作的Loader程序,才能夠更進一步開發WinCE的BSP,直至最后整個系統的成功。【1】
2 硬件平臺結構
我們的硬件平臺采用PXA 272 作為處理器,工作頻率為512M HZ,內部集成了64 M bytes NOR Flash。Intel PXA27X處理器是Intel公司推出的32位,基于Xscale架構的高性能的嵌入式芯片。【2】硬件平臺結構中主要還包括了如下的主要器件:128 M SDRAM、AC97 codec、 LCD 控制器、IrDa芯片、藍牙UART、USB控制器。另外還集成了3.5吋、240×320 QVGA的TFT-LCD 觸摸屏、PCMCIA、SD/MMC等外設接口,WLAN模塊。
Intel的PXA 27X內部支持SD Host的控制模塊,有SD Host控制寄存器和可以用于SD Host控制器的IO引腳,可用編程的方法對其功能進行選擇;但對于SD卡的檢測,寫保護和插槽的電源使能
等功能沒有專門的引腳。在本文實現中,對于卡檢測、電源引腳,通過GPIO擴展來實現。和SD卡硬件相關的部分引腳定義如表1所示:【3】【4】
表1 PXA 272部分GPIO引腳功能定義

?3 Bootloader的設計和實現
一個嵌入式WinCE系統從軟件的角度看通常可以分為兩部分:Bootloader 和 Wince嵌入式系統。從Bootloader和Wince嵌入式系統的關系看,Bootloader包含兩種不同的操作模式:“本地啟動”模式和“下載啟動”模式。【5】在本地啟動模式下Bootloader從Flash上將Wince操作系統加載到RAM中運行。在下載啟動模式下,目標機上的 Bootloader將通過串口或者網絡連接或者USB等從主機下載操作系統文件,也可以直接從SD/MMC卡、CF卡上加載操作系統鏡像文件。在下載啟動模式下,Bootloader通過串口給用戶提供簡單的命令行接口。
3.1 Bootloader的流程
當系統上電后,ARM CPU會從物理地址零處開始執行第一條指令的執行,通常會在該地址處放置一條跳轉指令。在我們的硬件平臺中物理地址零是64M Flash的物理起始地址。這里值得需要說明的是64M Flash 是固化在Intel PXA 272中的。所以我們的Bootloader燒入也必須從Flash的物理地址零開始。Bootloader二進制文件的最前面的4個字節就是一條跳轉指令。

  接著系統會跳轉到一段用ARM匯編編寫的代碼中去執行。其作用是完成系統啟動所必須的最小配置,例如配置cpu 的工作頻率,配置GPIO,配置時鐘等。然后為我們處理器的工作模式設置棧指針。
接著把Bootloader 從Flash搬運到SDRAM中,配置MMU,創建頁表,使能MMU,然后把自己后半部重定位到SDRAM中去執行。在后半部的執行中會根據用戶做的動作(是否按住一個按鈕)來判斷是要本地啟動還是下載啟動。具體的流程圖如圖1所示。
當用戶選擇特定下載啟動方式后,就進入具體的下載流程。首先需要對用戶選定的介質的硬件進行必要的初始化。之前做的一些硬件的初始化是不夠的,因為沒必要在前面進行全面的硬件初始化,現在要具體使用了就需要進行具體的配置。
3.2 軟件實現的關鍵
Bootloader是依賴于硬件而實現的,特別是在嵌入式系統中。不同的體系結構需求的Bootloader是不同的;除了體系結構,Bootloader還依賴于具體的嵌入式板級設備的配置。所以根據不同的板級配置需要修改相應的Bootloader。【5】我們使用的 bootloader是Microsoft提供的和Wince配套的Eboot。下面幾點是在我們的硬件平臺上修改Eboot的關鍵。
3.2.1 配置內存映射表
WinCE嵌入式系統通過定義OEMAddressTable來定義虛擬內存到物理內存的映射表.這個表在我們的實現中是bootloader和 WinCE系統公用的。【5】當然這不是強制性的.我們需要根據硬件平臺的不同定制自己的映射表。在我們的設計中,這個表把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的內部內存的虛擬地址映射到物理地址, 因為我們使用1M大小的內部存儲。最后一項必須是零,因為建立頁表的時候程序通過它來判斷是否結束映射過程。在配置MMU的時候會使用這個表來完成虛擬地址到物理地址的映射的頁表的建立。
3.2.2 為中斷模式設置分配堆棧
我們知道ARM的堆棧是分模式的,在程序中要為每種要用到的模式分配堆棧。如果沒有為某種模式分配堆棧,那么在進入這種模式之后系統不能繼續運行了。系統首先運行在SVC模式。在下載模式中,我們要通過USB ,網絡,SD/MMC和CF接口等下載文件,而這些都要用到中斷。所以我們要為中斷模式分配堆棧,其代碼片段如下:
ldr r2, =(Mode_IRQ :OR: NoIntsMask) ;中斷模式
msr cpsr_c,r2
ldr sp,=(EBOOT_IRQ_STACK_TOP+SDRAM_VIR_C_EBOOT_PARTITION) ;分配堆棧
在為中斷模式分配堆棧之后,還要進行堆棧切換,使程序重新回到SVC模式運行。
3.2.3 通過SD卡加載系統鏡像的實現
當用戶選取SD卡作為下載系統鏡像的目標后,bootloader就進入對SD處理的流程。首先通過SD卡檢測引腳判斷是否有SD卡插在插槽。如果有就要對SD控制的硬件進行初始化,例如SD插槽電源使能,設置時鐘,設置功能GPIO等。
其中需要說明的是Intel PXA 272的時鐘管理比較復雜,它有兩個鎖相環路PLL:外圍設備鎖相環路,核心鎖相環路。其中外圍設備鎖相環路為外圍總線和USBC,I2S接口,SD接口等外圍設備提供時鐘。在時鐘控管理寄存器里,寄存器CKEN用來控制如USB,UART,SD等接口模塊的時鐘使能。【1】
接著是對SD卡協議棧的軟件實現.為了減少Bootloader中SD Host驅動的復雜性,能夠易于調試,實現了總線驅動模塊,客戶端驅動模塊和FAT16文件系統模塊。所以在我們的實現中對SD卡上的文件系統要有一定的限制,必須是格式化成FAT16的文件系統才能被我們的bootloader識別。當然在具體的實現中我們還可以使用另外的文件系統格式。其協議棧結構如圖2所示:

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

  從表中數據可知,本地啟動是最快的,這是不容置疑的。其次是通過SD卡啟動。另外值得說明的是,通過USB和TFTP下載啟動在都需要的在通信的另一端軟件的支持和用戶的介入操作。而SD卡的數據通信傳輸完全由硬件實現,這也是SD卡加載相對比較快的主要原因。而且使用TFTP下載還需要進行相對復雜的配置。而在使用SD的加載中Bootloader會自動去搜尋系統鏡像,自動下載。這對用戶的使用來說是方便快捷的。
另外從使用DMA的SD 驅動下載文件和Bootloader中的實現做比較,可以看出使用DMA后大大提高了使用SD下載的性能。當然我們也可以在Bootloader中使用 DMA方式來實現以提高性能。但這樣一來會大大增加Bootloader的復雜性。我們在Bootloader中實現使用SD做加載啟動的主要目的是方便開發和調試SD硬件模塊,而且實際使用中絕大部分會是本地啟動。我們的實現中目的已經達到,所以可以不考慮這些。
4 結束語
Bootloader是操作系統和硬件的樞紐,相對于操作系統內核來說它是一個硬件抽象層。嵌入式領域中操作系統的移植關鍵在于Bootloader的移植和操作系統內核硬件相關部分移植。所設計并實現的基于Intel PXA 272嵌入式處理器的從SD卡加載并啟動WinCE系統的Bootloader能提高WinCE操作系統移植的穩定性并加快WinCE操作系統移植的周期。
本文作者創新點: 在基于Intel PXA 272 處理器的bootloader中實現了SD卡的協議棧,并實現了從SD卡加載并啟動WinCE嵌入式系統鏡像的功能.
參考文獻:

【1】杜春雷.ARM體系結構與編程.北京:清華大學出版社 ,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 系統分析及實驗教程.北京:機械工業出版社,2003
【6】萬永波 張根寶 田澤 楊峰. 基于ARM的嵌入式系統Bootloader啟動流程分析.微計算機信息. 2005年第11-2期.第一頁

基于Intel PXA272的Bootloader的設計與實現


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 正宁县| 太仓市| 景洪市| 通化市| 革吉县| 泽库县| 禄丰县| 嵊州市| 利津县| 达日县| 盖州市| 定襄县| 澄江县| 桑植县| 开阳县| 英山县| 上思县| 镇江市| 铜梁县| 北安市| 凤冈县| 民丰县| 通榆县| 罗田县| 二手房| 星子县| 凭祥市| 南部县| 韩城市| 景东| 达日县| 苗栗市| 策勒县| 五峰| 乌鲁木齐市| 塔河县| 承德市| 武冈市| 图木舒克市| 文登市| 松江区|