摘 要: 通過對title="OMAP">OMAP啟動方式的分析,,針對OMAP需要從外部Flash啟動、耗時大,、風(fēng)險高的缺點(diǎn),,提出了一種多級啟動的Boot Loader設(shè)計方案。該方案通過兩級啟動,,在RAM中運(yùn)行Boot Loader,,降低了代碼運(yùn)行的風(fēng)險,減小了Boot過程的耗時,。實(shí)驗(yàn)證明,,使用該方法拷貝程序的耗時能夠減少20%左右。
關(guān)鍵詞:Boot Loader,;OMAP,;多級啟動
開放式多媒體應(yīng)用平臺(OMAP)是TI公司推出的,適用于下一代嵌入式終端設(shè)計的高集成度雙核心處理器,。它將一顆善于進(jìn)行數(shù)據(jù)處理的DSP內(nèi)核與一顆控制性能很強(qiáng)的ARM內(nèi)核集成在一個芯片中,,既改進(jìn)了普通DSP處理器缺乏外部控制能力的缺點(diǎn),也彌補(bǔ)了普通ARM處理器無法進(jìn)行大運(yùn)算量數(shù)據(jù)處理的不足,。與單核心處理器相比,,OMAP雙核結(jié)構(gòu)處理器能夠完成以前需要兩顆處理器才能完成的工作,可以得到更低的系統(tǒng)功耗與成本,,因而廣泛應(yīng)用于嵌入式終端中,。
Boot Loader是嵌入式系統(tǒng)的重要組成部分,它是在操作系統(tǒng)啟動之前運(yùn)行的初始化加載程序,,用于設(shè)置操作系統(tǒng)運(yùn)行的硬件環(huán)境并將Flash中存儲的操作系統(tǒng)加載到RAM中運(yùn)行,。
1 OMAP的啟動方式
OMAP多采用外部Flash啟動方式。以OMAP5910為例,,它包含一顆TMS320C55x DSP核心以及一顆ARM925核心,其中MPU(ARM925)為主控核心,它可以控制DSP內(nèi)核的啟動,、復(fù)位等操作。OMAP5910上電時,,MPU首先啟動,,從地址0x00000000開始讀取指令,運(yùn)行程序,。一般應(yīng)在0x00000000地址處放置一條跳轉(zhuǎn)指令,,令其指向Boot Loader啟動程序的入口處,OMAP5910啟動后跳轉(zhuǎn)至Boot Loader程序處執(zhí)行硬件環(huán)境設(shè)置及操作系統(tǒng)加載工作,。根據(jù)OMAP5910的地址空間映射關(guān)系[1],,0x00000000地址屬于EMIFS(慢速片外存儲器接口)總線,CS0空間,,用于連接外部Flash,,因而OMAP5910的啟動階段的程序在外部Flash中進(jìn)行取指操作,。
在實(shí)際應(yīng)用中發(fā)現(xiàn),如果操作系統(tǒng)占用空間比較大,,使得Boot Loader需要從Flash中拷貝的代碼量很大,,那么系統(tǒng)的啟動過程會耗費(fèi)較長的時間。由于MPU需要在Flash中取指,,又要將同一空間中其他部分的數(shù)據(jù)搬移到不同的RAM(DSP運(yùn)行的內(nèi)部SRAM以及MPU運(yùn)行的SDRAM)中,,從而使得程序取指錯誤的概率增加。經(jīng)過測試發(fā)現(xiàn),,隨著Flash擦寫次數(shù)的增多,,F(xiàn)lash性能下降,,這種錯誤的概率會顯著增加,。這種錯誤體現(xiàn)到應(yīng)用中,就會造成整個系統(tǒng)在啟動過程中偶爾出現(xiàn)莫明其妙的死機(jī),,只能通過斷電重新啟動才能解決,,因而這種啟動方式存在較大的隱患。
2 多級啟動Boot Loader
2.1 設(shè)計思想
考慮到啟動過程中MPU需要從Flash中取指,,這種操作既有風(fēng)險且取指周期又長,,因而應(yīng)盡量減少在Flash中的取指動作。而RAM作為高速存取設(shè)備,,其讀寫周期比Flash要短得多,,因而將代碼拷貝過程中的指令放到RAM中進(jìn)行取指操作,既能降低取指周期,,又能降低載入系統(tǒng)時的風(fēng)險,。通過上述分析,可以設(shè)計一種多級載入的BOOT過程,,首先用一段盡量短的程序?qū)鹘y(tǒng)意義上的Boot Loader拷貝到一段空白(載入操作系統(tǒng)時不會占用)的RAM中,,之后再跳轉(zhuǎn)到RAM中的Boot Loader程序入口,執(zhí)行真正的Boot Loader程序,。與操作系統(tǒng)相比,,Boot Loader程序代碼要短得多,拷貝時間基本可以忽略,,因而運(yùn)行風(fēng)險也小很多,。這段程序在Flash中運(yùn)行,任務(wù)是拷貝Boot Loader程序,,可以稱之為Mini Loader,。
2.2 具體過程
多級Boot Loader啟動過程分為Mini Loader、System Loader以及Flasher 3個部分,。
(1) Mini Loader
Mini Loader在Flash中運(yùn)行,,其目的是從Flash中將Boot Loader程序拷貝到RAM中,。為了盡量減小Flash中運(yùn)行程序的數(shù)量就需要Mini Loader盡量短小,故而Mini Loader在進(jìn)行拷貝動作之前只需要配置與外部總線EMIFS,、EMIFF相關(guān)的寄存器,。具體流程如圖1所示。同時還要注意需要設(shè)置MPU的中斷向量表0x00000000的跳轉(zhuǎn)地址為Mini Loader的程序入口,。
(2) System Loader
該部分為傳統(tǒng)意義上的Boot Loader過程,,完成硬件環(huán)境相關(guān)設(shè)置及初始化,并將操作系統(tǒng)載入到RAM中運(yùn)行,。需要注意的是,MPU本身的中斷向量表須載入到內(nèi)部SRAM中,,其他操作系統(tǒng)部分可以載入到外部SDRAM中。
由于OMAP平臺為雙核心結(jié)構(gòu),,因此 System Loader除了需要載入MPU系統(tǒng)本身之外,,還需要配置DSP的載入及啟動過程。DSP有3種啟動方法:Flash引導(dǎo)方式與ARM載入方式,,參考文獻(xiàn)[2]對這兩種方式進(jìn)行了對比分析,。本設(shè)計采用ARM載入方式,這樣可以通過ARM動態(tài)配置DSP部分的代碼,,控制DSP核心的處理流程,。與參考文獻(xiàn)[2]所不同的是,本方法中DSP程序采用與MPU操作系統(tǒng)相同的方式存儲,,也存入Flash中,,而不是作為常量數(shù)組編入Boot Loader程序中,這種方式較參考文獻(xiàn)[2]中的方法更加便于管理,,單獨(dú)對DSP程序進(jìn)行升級也更加方便,,而且減小了System Loader的程序長度,更有利于多級啟動方式,。
因?yàn)镺MAP本身的GPIO(MUPIO)有限,,所以大多設(shè)計都要采用FPGA作為外圍擴(kuò)展控制器,用來擴(kuò)展更多的控制端口以及通信端口,。一般FPGA本身無法存儲程序,,其程序存儲在片外ROM中,F(xiàn)PGA上電之后可以通過多種方式自行加載到ROM中運(yùn)行,。本設(shè)計通過MPU加載FPGA程序,,并將FPGA固件程序也存儲于同一Flash中,這樣省去了一片F(xiàn)PGA專用ROM,,既方便代碼管理,,又降低了硬件成本和設(shè)計復(fù)雜度。以XILINX公司的XC2S系列FPGA為例,其加載程序時可采用串行加載模式,,選擇FPGA為從模式,,將OMAP本身的MCBSP配置為SPI主模式,工作于時鐘停止模式,,包含一個時鐘周期延時,,輸出時鐘信號高有效,采用幀同步模式,,每個數(shù)據(jù)幀8 bit,。給FPGA載入程序時,要將存儲于Flash中的FPGA程序代碼讀出,,由于XILINX開發(fā)工具ISE輸出的HEX文件以字節(jié)(8 bit)為單位,,而Flash中存儲的內(nèi)容以雙字(32 bit)為單位(由ARM指令長度而定),因而從Flash中讀出32 bit的數(shù)據(jù)之后需要按照從高到低的字節(jié)順序發(fā)送,。而且,,ISE的HEX文件每字節(jié)bit排列順序與MCBSP的傳輸順序正好相反,因此每個字節(jié)內(nèi)部需要將bit反向重排,。
System Loader流程如圖2所示,,啟動順序與本小節(jié)所述順序正好相反,,這是因?yàn)镕PGA一般多用于進(jìn)行硬件設(shè)備的控制,,所以需要最先啟動;而DSP由于其自身特點(diǎn),,多用于數(shù)據(jù)處理工作,,作為MPU的協(xié)處理器使用,因此需要在MPU操作系統(tǒng)啟動之前做好準(zhǔn)備,。
(3)Flasher
Flasher過程主要負(fù)責(zé)向Flash中燒寫編譯好的程序目標(biāo)碼,,主要包括Boot Loader、MPU,、DSP,、FPGA等部分。采用RS232串行端口與主機(jī)相連,,實(shí)現(xiàn)程序目標(biāo)碼的下載,。傳輸協(xié)議采用大多數(shù)編譯器都支持的Intel Hex格式[5]。Intel Hex格式采用ASCII字符表示方式,,這樣程序目標(biāo)碼的每個字節(jié)需要用2個ASCII字符來表示,,包含冗余信息較大,而且Intel Hex格式僅含目標(biāo)碼的地址信息與具體內(nèi)容,,而無法區(qū)分目標(biāo)碼的類別,因而需要對Intel Hex進(jìn)行擴(kuò)展,,以降低冗余并支持更多的操作。擴(kuò)展的Hex不使用ASCII字符,,而直接使用原數(shù)據(jù)格式,,這樣可以降低一半數(shù)據(jù)量,。為了與Intel Hex格式有所區(qū)分,采用“,;”作為前綴標(biāo)識,,格式如表1所示。同時對數(shù)據(jù)類型進(jìn)一步擴(kuò)展,,用以區(qū)分各種目標(biāo)碼類別,,如表2所示。
可以看出,,表2中僅包括擦除各種類型目標(biāo)碼的指令,,而沒有包含寫入目標(biāo)碼時區(qū)分類別的具體指令,這是因?yàn)閷懭霑r各種不同類型的目標(biāo)碼可以直接通過地址來區(qū)分,,每種類型目標(biāo)碼都有自己單獨(dú)的地址段,,相互之間沒有交叉。Flasher流程如圖3所示,,通過解析Hex記錄格式,,來判斷命令類型,從而進(jìn)行相應(yīng)的操作,。其中校驗(yàn)?zāi)J接糜隍?yàn)證Flash中所存儲的程序代碼是否與串行端口上收到的數(shù)據(jù)一致,。所有程序更新結(jié)束之后,通過重新啟動命令復(fù)位OMAP芯片,,使整個系統(tǒng)重新啟動,。
3 拷貝程序耗時對比測試
采用Intel公司RD48F3000P0ZBQ0 Flash存儲器以及三星K4M56163PG移動版SDRAM與OMAP5910相連,組成OMAP5910運(yùn)行所需的最小系統(tǒng),,OMAP運(yùn)行頻率144 MHz,。分別采用傳統(tǒng)啟動方式(程序在Flash中運(yùn)行)以及本文所述的啟動方式(程序在RAM中運(yùn)行)從Flash中拷貝相同長度的數(shù)據(jù)到SDRAM中,測試其耗時,。每次拷貝數(shù)據(jù)量選取64 KB~8 192 KB,,每種數(shù)據(jù)量每種方式測試5次,具體時間如表3所示,,其中表3(a)為程序在RAM中運(yùn)行時的耗時,,表3(b)為程序在Flash中運(yùn)行時的耗時。由表中數(shù)據(jù)對比可以看出,,拷貝數(shù)據(jù)量較大時,,本文中所述的RAM拷貝方式優(yōu)勢比較明顯,有大約20%的提高,,對于目前的嵌入式操作系統(tǒng)來說,,基本內(nèi)核的代碼量都比較大,因而采用本文所述的方式能夠帶來比較大的耗時改善。
OMAP作為一種整合了ARM控制能力與DSP數(shù)據(jù)處理能力的雙核心處理器已經(jīng)廣泛應(yīng)用于各種嵌入式設(shè)備中,,但大多數(shù)OMAP處理器通過外部Flash啟動,,既浪費(fèi)時間又有較高風(fēng)險。本文針對OMAP啟動過程中的這一缺陷,,設(shè)計的多級啟動Boot Loader較之傳統(tǒng)方式有較大的性能改善,,目前已在數(shù)字集群手持終端、網(wǎng)絡(luò)多媒體可視電話等項(xiàng)目中得到成功應(yīng)用,,并取得很好的效果,。
參考文獻(xiàn)
[1] Texas Instruments OMAP5910 dual-core processor technical reference manual. 2003.
[2] 呂喜在,蘇紹 ,,黃飛,,等,開放式多媒體應(yīng)用平臺OMAP5910雙核程序裝載方法[J]. 微計算機(jī)信息,,2005,,21(9-2):94-95.
[3] 李興紅.基于OMAP的嵌入式系統(tǒng)開發(fā)[J].數(shù)據(jù)采集與處理,2008,23:181-184.
[4] 李毅,,李連云,,張偉宏等.Bootloader面向不同結(jié)構(gòu)Flash的實(shí)現(xiàn)[J].計算機(jī)工程,2008,34(4):82-86.
[5] Intel Corporation. . Intel hexadecimal object file format specification revision A. 1988.
[6] 張石,,常皓,,佘黎煌,等. 基于OMAP5910的移動媒體播放機(jī)設(shè)計[J]. 電子技術(shù)應(yīng)用,,2007,,33(2):27-29.