基于PXA272的Bootloader的設(shè)計(jì)與實(shí)現(xiàn)
3.2.2 為中斷模式設(shè)置分配堆棧
我們知道ARM的堆棧是分模式的,在程序中要為每種要用到的模式分配堆棧。如果沒有為某種模式分配堆棧,那么在進(jìn)入這種模式之后系統(tǒng)不能繼續(xù)運(yùn)行了。系統(tǒng)首先運(yùn)行在SVC模式。在下載模式中,我們要通過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模式運(yùn)行。
3.2.3 通過SD卡加載系統(tǒng)鏡像的實(shí)現(xiàn)
當(dāng)用戶選取SD卡作為下載系統(tǒng)鏡像的目標(biāo)后,bootloader就進(jìn)入對(duì)SD處理的流程。首先通過SD卡檢測引腳判斷是否有SD卡插在插槽。如果有就要對(duì)SD控制的硬件進(jìn)行初始化,例如SD插槽電源使能,設(shè)置時(shí)鐘,設(shè)置功能GPIO等。
其中需要說明的是Intel PXA 272的時(shí)鐘管理比較復(fù)雜,它有兩個(gè)鎖相環(huán)路PLL:外圍設(shè)備鎖相環(huán)路,核心鎖相環(huán)路。其中外圍設(shè)備鎖相環(huán)路為外圍總線和USBC,I2S接口,SD接口等外圍設(shè)備提供時(shí)鐘。在時(shí)鐘控管理寄存器里,寄存器CKEN用來控制如USB,UART,SD等接口模塊的時(shí)鐘使能?!?】
接著是對(duì)SD卡協(xié)議棧的軟件實(shí)現(xiàn).為了減少Bootloader中SD Host驅(qū)動(dòng)的復(fù)雜性,能夠易于調(diào)試,實(shí)現(xiàn)了總線驅(qū)動(dòng)模塊,客戶端驅(qū)動(dòng)模塊和FAT16文件系統(tǒng)模塊。所以在我們的實(shí)現(xiàn)中對(duì)SD卡上的文件系統(tǒng)要有一定的限制,必須是格式化成FAT16的文件系統(tǒng)才能被我們的bootloader識(shí)別。當(dāng)然在具體的實(shí)現(xiàn)中我們還可以使用另外的文件系統(tǒng)格式。其協(xié)議棧結(jié)構(gòu)如圖2所示:
3.3實(shí)驗(yàn)結(jié)果
我們使用一個(gè)22.7M的WinCE鏡像,在Bootloader中分別用USB,SD卡,TFTP,本地四種方式使用進(jìn)行加載啟動(dòng)測試,分別測試了50次。因?yàn)樵?a class="contentlabel" href="http://butianyuan.cn/news/listbylabel/label/Bootloader">Bootloader中SD Host的實(shí)現(xiàn)沒有使用DMA方式,為了進(jìn)行性能比較,我們又調(diào)用WinCE系統(tǒng)下使用DMA的SD Host驅(qū)動(dòng)加載同樣大小的文件進(jìn)行了50次測試。表2是我們測試的結(jié)果。表中數(shù)據(jù)為平均值。
表2 測試結(jié)果
SD卡 | USB | TFTP | 使用DMA的SD | 本地啟動(dòng) | |
加載時(shí)間(秒) | 51 | 96 | 53 | 28 | 3 |
從表中數(shù)據(jù)可知,本地啟動(dòng)是最快的,這是不容置疑的。其次是通過SD卡啟動(dòng)。另外值得說明的是,通過USB和TFTP下載啟動(dòng)在都需要的在通信的另一端軟件的支持和用戶的介入操作。而SD卡的數(shù)據(jù)通信傳輸完全由硬件實(shí)現(xiàn),這也是SD卡加載相對(duì)比較快的主要原因。而且使用TFTP下載還需要進(jìn)行相對(duì)復(fù)雜的配置。而在使用SD的加載中Bootloader會(huì)自動(dòng)去搜尋系統(tǒng)鏡像,自動(dòng)下載。這對(duì)用戶的使用來說是方便快捷的。
另外從使用DMA的SD 驅(qū)動(dòng)下載文件和Bootloader中的實(shí)現(xiàn)做比較,可以看出使用DMA后大大提高了使用SD下載的性能。當(dāng)然我們也可以在Bootloader中使用DMA方式來實(shí)現(xiàn)以提高性能。但這樣一來會(huì)大大增加Bootloader的復(fù)雜性。我們?cè)贐ootloader中實(shí)現(xiàn)使用SD做加載啟動(dòng)的主要目的是方便開發(fā)和調(diào)試SD硬件模塊,而且實(shí)際使用中絕大部分會(huì)是本地啟動(dòng)。我們的實(shí)現(xiàn)中目的已經(jīng)達(dá)到,所以可以不考慮這些。
4 結(jié)束語
Bootloader是操作系統(tǒng)和硬件的樞紐,相對(duì)于操作系統(tǒng)內(nèi)核來說它是一個(gè)硬件抽象層。嵌入式領(lǐng)域中操作系統(tǒng)的移植關(guān)鍵在于Bootloader的移植和操作系統(tǒng)內(nèi)核硬件相關(guān)部分移植。所設(shè)計(jì)并實(shí)現(xiàn)的基于Intel PXA 272嵌入式處理器的從SD卡加載并啟動(dòng)WinCE系統(tǒng)的Bootloader能提高WinCE操作系統(tǒng)移植的穩(wěn)定性并加快WinCE操作系統(tǒng)移植的周期。
本文作者創(chuàng)新點(diǎn): 在基于Intel PXA 272 處理器的bootloader中實(shí)現(xiàn)了SD卡的協(xié)議棧,并實(shí)現(xiàn)了從SD卡加載并啟動(dòng)WinCE嵌入式系統(tǒng)鏡像的功能.
參考文獻(xiàn):
【1】杜春雷.ARM體系結(jié)構(gòu)與編程.北京:清華大學(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 系統(tǒng)分析及實(shí)驗(yàn)教程.北京:機(jī)械工業(yè)出版社,2003
【6】萬永波 張根寶 田澤 楊峰. 基于ARM的嵌入式系統(tǒng)Bootloader啟動(dòng)流程分析.微計(jì)算機(jī)信息. 2005年第11-2期.第一頁
評(píng)論