0 引言
微軟的Windows CE系統(tǒng)是被廣泛使用的嵌入式系統(tǒng)之一。在產(chǎn)品的研究開發(fā)中,,一些嵌入式操作系統(tǒng)的啟動(dòng)速度所花時(shí)間比較長,,Wind-ows CE也不例外。由于各種因素的影響,,有些情況下啟動(dòng)甚至超過1 min,。而在實(shí)際的嵌入式電子產(chǎn)品中客戶需要體驗(yàn)一個(gè)極速爽快而又穩(wěn)定的系統(tǒng),避免長時(shí)間等待,。因此,,如何快速啟動(dòng)Windows CE系統(tǒng)是一個(gè)很重要的內(nèi)容。本文將基于三星公司的S3C2440A處理器和Windows CE
系統(tǒng),,分析Windows CE的啟動(dòng)原理和影響其啟動(dòng)速度的原因,,給出加快啟動(dòng)的方案。
1 Windows CE的啟動(dòng)過程
一般嵌入式系統(tǒng)的引導(dǎo)過程如圖1所示,。其中引導(dǎo)加載程序(BootLoader)是系統(tǒng)加電后運(yùn)行的第一段代碼,,主要是通過設(shè)置寄存器初始化硬件的工作方式,如設(shè)置時(shí)鐘,、中斷控制寄存器等,,完成內(nèi)存映射、初始化MMU等,。其次是系統(tǒng)執(zhí)行環(huán)境的初始化,,將系統(tǒng)內(nèi)核(Kernel)和應(yīng)用程序的映像從只讀存儲(chǔ)器加載或拷貝到系統(tǒng)的RAM中執(zhí)行,完成系統(tǒng)內(nèi)核的加載以及應(yīng)用程序的啟動(dòng)等,。
1.1 BootLoader的啟動(dòng)
BootLoader是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序,,它可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),,為調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好環(huán)境。引導(dǎo)程序完成自己的任務(wù)后,,就將控制權(quán)移交給內(nèi)核,。通常引導(dǎo)程序是放置在不易丟失的快閑存儲(chǔ)器的開始地址或者是系統(tǒng)冷啟動(dòng)時(shí)PC寄存器的初始值,。
1.2 內(nèi)核啟動(dòng)時(shí)加載過程
BootLoader按照Windows CE啟動(dòng)方式的不同可分為2大類:下載模式和啟動(dòng)加載模式。當(dāng)BootLoader把nk.bin解壓到RAM后就把CPU控制權(quán)交給Windows CE內(nèi)核,。
啟動(dòng)加載模式是BootLoader的正常加載模式,,BootLoader從存儲(chǔ)介質(zhì)將操作系統(tǒng)加載到RAM中,并從RAM中啟動(dòng)運(yùn)行操作系統(tǒng),。該過程并沒有用戶的介入,。
下載模式則是BootLoader從開發(fā)工作站下載操作系統(tǒng)映像文件到目標(biāo)設(shè)備的RAM,然后再將它寫到目標(biāo)設(shè)備的FLASH等存儲(chǔ)介質(zhì)中,。該過程要通過串口線或網(wǎng)絡(luò)連接等通信手段從主機(jī)(Host)下載文件,。因此,不同的加載模式會(huì)直接影響內(nèi)核啟動(dòng)加載時(shí)間,。
2 影響Windows CE啟動(dòng)速度的主要因素
影響系統(tǒng)啟動(dòng)時(shí)間的因素可以從系統(tǒng)本身和硬件2個(gè)方面考慮,。
2.1 系統(tǒng)加載
系統(tǒng)在啟動(dòng)時(shí)涉及到BootLoader、內(nèi)核加載,、初始化進(jìn)程,、硬件的驅(qū)動(dòng)程序和接口程序以及應(yīng)用程序組等。因此Windows CE啟動(dòng)速度要與引導(dǎo)程序初始化時(shí)間,、內(nèi)核加載時(shí)間,、硬件驅(qū)動(dòng)的加載時(shí)間、應(yīng)用程序的加載時(shí)間等有著直接的關(guān)系,。
2.2 硬件
顯然,,CPU的頻率及效率、內(nèi)存的大小及類型等直接影響著系統(tǒng)的啟動(dòng)速度,。例如ARM7和ARM9對(duì)運(yùn)行系統(tǒng)的速度是明顯不一樣的,,另外,內(nèi)存方面選擇NoR FLASH還是NAND FLASH其也會(huì)對(duì)啟動(dòng)速度有一定的影響,。
3 Windows CE快速啟動(dòng)的方案
快速啟動(dòng)Windows CE的方案大致有下面幾種,。由于實(shí)驗(yàn)條件的限制,本文主要討論內(nèi)核體積,、使用Multi-bin技術(shù),、串口打印輸出、不同注冊(cè)表形式對(duì)啟動(dòng)速度的影響,。
3.1 使用合理的閃存和選擇適當(dāng)?shù)腤indows CE內(nèi)核的運(yùn)行方式
當(dāng)前應(yīng)用于嵌入式系統(tǒng)的FLASH從制作工藝角度講主要分為2種:NOR FLASH與NANDFLASH,。NOR的特點(diǎn)是芯片內(nèi)執(zhí)行(Execute In Place,XIP),,這樣應(yīng)用程序可以直接在NOR FLASH中直接運(yùn)行,,而無需再把代碼讀到系統(tǒng)的RAM中,但是很低的寫入和擦除速度大大影響了它的性能,。NAND結(jié)構(gòu)能提供極高的單元密度,,可以達(dá)到高存儲(chǔ)密度,,并且寫入和擦除的速度也很快,但在使用時(shí)必須先寫入驅(qū)動(dòng)程序,,而且,由于不能向壞塊寫入,,這就需要在NAND FLASH上自始自終都必須進(jìn)行虛擬映射,,可能會(huì)產(chǎn)生額外的時(shí)間花費(fèi)。因此,,選擇不同閃存對(duì)啟動(dòng)速度有一定的影響,。
也正因?yàn)樯厦?種閃存的特點(diǎn)不同,Windows CE的運(yùn)行方式直接與它們有關(guān),,可以分為2類,,一是在NOR FLASH上直接運(yùn)行,二是用NAND FLASH來存儲(chǔ),,再加載到內(nèi)存中運(yùn)行,。前者把內(nèi)核的可執(zhí)行映像燒寫到FLASH上,可以實(shí)現(xiàn)XIP,;而后者是先把內(nèi)核的壓縮文件放在FLASH上,,啟動(dòng)時(shí)先解壓,再執(zhí)行,。因此,,在NOR FLASH上直接運(yùn)行會(huì)速度更快。
3.2 精簡Windows CE內(nèi)核體積和加載內(nèi)容
在Windows CE啟動(dòng)過程中,,加載內(nèi)核過程和加載內(nèi)核之后所占時(shí)間是不一樣的,,前者是從NANDFLASH加載內(nèi)核到內(nèi)存,占了絕大多數(shù)時(shí)間,,后者其實(shí)只占很小的一小部分時(shí)間,。因此,可以通過縮短加載內(nèi)核過程中的時(shí)間來實(shí)現(xiàn)縮短啟動(dòng)時(shí)間,。要做到這一點(diǎn),,可以通過縮小內(nèi)核來實(shí)現(xiàn)。也就是組件全部根據(jù)所需要的來定制,,刪除掉所有不必要的組件,。其中,最有效的辦法之一是縮減字體,,去除不需要的其他國家的字庫,。
另一方面,內(nèi)核在啟動(dòng)時(shí)會(huì)有很多靜態(tài)和延遲加載依賴項(xiàng),,尤其是各種安全性DLL,,這肯定增加啟動(dòng)時(shí)間,。啟動(dòng)時(shí)加載的驅(qū)動(dòng)程序、設(shè)備和自啟動(dòng)程序也會(huì)占用一定的時(shí)間,。因此,,在設(shè)備能正常啟動(dòng)和應(yīng)用的情況下,應(yīng)以精簡的原則,,以最小化來加載設(shè)備驅(qū)動(dòng)和啟動(dòng)程序,,以最少數(shù)量的組件和驅(qū)動(dòng)來啟動(dòng)系統(tǒng),減少不必要的時(shí)間延遲,。例如可以精簡設(shè)備上的外殼程序和啟動(dòng)界面等,。
3.3 使用Multi-bin技術(shù)
Windows CE中提供了Multi-bin的功能。字面上Multi-bin是多個(gè)bin的意思,,它將整個(gè)內(nèi)核映像分成幾部分,,在Windows CE啟動(dòng)時(shí)可只加載核心部分,這樣就能有效提高Windows CE的啟動(dòng)速度,。方法如下:
首先,,修改Eboot,使其支持BinFN(Binary Rom Image File System)文件系統(tǒng),,支持Multi-bin的下載和燒寫,,同時(shí)在注冊(cè)表platfor-m.reg中增加BinFN分區(qū)。
其次,,修改配置文件config.bib,,根據(jù)實(shí)際情況設(shè)置各分區(qū)空間和類型;并對(duì)XIPKERNEL進(jìn)行規(guī)劃,,將最小化系統(tǒng)內(nèi)核打包到其中,,即在project.bib中的modules和Files中添加必須的內(nèi)核文件,例如系統(tǒng)必須加載組件有nk.exe,,coredll.dll,,filesys.exe,fatfsd.
dll,,diskcaehe.dll,,F(xiàn)atutil.dll,binfs.dll,,fsdmgr.dll,,mspart.dll,smFLASH.dll,,boot.hv等,。
最后,在用Platform Builder定制內(nèi)核時(shí)系統(tǒng)選用的RAM and ROM File System文件系統(tǒng),注冊(cè)表格式選用Hive-based Registry,,它支持永久保存,。
這樣經(jīng)過編譯后,將生產(chǎn)的xip.bin和XIPKERNEL.bin文件在EBoot.nb0的引導(dǎo)下進(jìn)行燒寫,,完成Windows CE的燒寫工作并可以使用Wi-ndows CE系統(tǒng),。
3.4 關(guān)閉串口輸出
Windows CE在啟動(dòng)時(shí)把很多啟動(dòng)信息狀態(tài)輸出,因?yàn)榇赗ETAILMSG等輸出打印信息要花一定的時(shí)間,,故在編譯沒有出錯(cuò)的情況下把串口輸出信息關(guān)閉,,也可以提高啟動(dòng)速度。做到這點(diǎn)可以在Debug.c文件中去除OEMWriteDebugByte(),,OEMReadDebugByte()函數(shù)的輸出內(nèi)容。
3.5 選擇適當(dāng)?shù)淖?cè)表方式
注冊(cè)表分為基于RAM的注冊(cè)表(RAM-Based Registry)和基于Hive的注冊(cè)表(Hive-Based Registry)兩種方式,,一般都用于記錄著所有應(yīng)用程序和硬件外設(shè)的驅(qū)動(dòng)信息,。
基于RAM的注冊(cè)表把整個(gè)注冊(cè)表作為一個(gè)對(duì)象存儲(chǔ)堆存放在系統(tǒng)的內(nèi)存中,如果對(duì)系統(tǒng)進(jìn)行冷啟動(dòng)或者系統(tǒng)斷電,,對(duì)注冊(cè)表的所有改動(dòng)都會(huì)使存儲(chǔ)的數(shù)據(jù)丟失,,所以基于對(duì)象存儲(chǔ)方式實(shí)現(xiàn)的注冊(cè)表一般用于較少斷電的系統(tǒng),或一般不需要冷啟動(dòng)的系統(tǒng),。但如果使用基于RAM的注冊(cè)表,,它會(huì)使系統(tǒng)速度更快,占用空間更小,,對(duì)注冊(cè)表的讀寫訪問操作會(huì)變得非常高效,,系統(tǒng)開發(fā)者應(yīng)提供一種使系統(tǒng)能夠在斷電前后備份和恢復(fù)注冊(cè)表的方法,通常這種備份和恢復(fù)注冊(cè)表的方法的缺點(diǎn)是需要兩次啟動(dòng),,在啟動(dòng)過程中必須多一次熱啟動(dòng)才能使恢復(fù)的注冊(cè)表有效,,因此效率相對(duì)比較低。
基于HIVE結(jié)構(gòu)存儲(chǔ)的注冊(cè)表使用文件存儲(chǔ)注冊(cè)表數(shù)據(jù),,它與系統(tǒng)使用的文件系統(tǒng)的類型無關(guān),。這種方式使系統(tǒng)斷電前后無須備份和恢復(fù)注冊(cè)表數(shù)據(jù),這使系統(tǒng)冷啟動(dòng)時(shí)速度更快,。
總之,,基于RAM的注冊(cè)表在經(jīng)常熱啟動(dòng)的設(shè)備上是非常高效的,在經(jīng)常冷啟動(dòng)的設(shè)備中性能卻讓人失望,;而基于Hive的注冊(cè)表在經(jīng)常冷啟動(dòng)或不常熱啟動(dòng)的設(shè)備中非常高效,。因此,采用不同的類型也會(huì)影響Windows CE的啟動(dòng)效率,,用戶應(yīng)根據(jù)實(shí)際情況進(jìn)行合理選擇,。
4 實(shí)驗(yàn)與分析
4.1 實(shí)驗(yàn)平臺(tái)
(1)硬件平臺(tái)。ARM處理器為三星公司的S3C2440A,標(biāo)稱工作頻率為400 MHz,;存儲(chǔ)器包括2片32 MB SDRAM,,1片64 MB的NAND FLASH;設(shè)備模塊包括USB,,LCD,,UART。
(2)軟件平臺(tái),。Bootloader:bootloader VER-5.0,;操作系統(tǒng):Windows CE5.O;開發(fā)工具:Platform Builder 5.0,。
4.2 實(shí)驗(yàn)條件
在建立PB工程時(shí)選擇移動(dòng)手持設(shè)備(Mobile Handheld)模板,,其他組件選擇如表1所示,就可以實(shí)現(xiàn)支持MFC編程,、文字表格編輯,、MP3播放的手持設(shè)備系統(tǒng),在該系統(tǒng)下得到表1數(shù)據(jù),。
表2為實(shí)現(xiàn)MP3播放功能精簡系統(tǒng)前后的比較,。精簡前的方法是選擇移動(dòng)手持設(shè)備(MobileHandheld)模板,加入MP3支持,;精簡后的方法是選擇CustomDevice模板,,只選擇MP3 Codec,wMA and MP3Streaming和Windows Media Player就可以實(shí)現(xiàn)MP3播放,,不加入其他所有不必要的組件,,從而減小內(nèi)核體積。表3,、表4的數(shù)據(jù)都是基于MobileHandheld模板下不同注冊(cè)表RAM和Hive下得到的數(shù)據(jù),。
4.3 實(shí)驗(yàn)結(jié)果及分析
表2至表4中對(duì)比了相應(yīng)優(yōu)化帶來啟動(dòng)時(shí)間的比較,時(shí)間的計(jì)算使從開始啟動(dòng)到進(jìn)入windows CE界面為止,。從表2可以看出,,使用Multi-bin技術(shù)可以很大提升啟動(dòng)速度,縮短了啟動(dòng)時(shí)間,;而串口輸出信息也有一定的影響,,特別是在輸出信息很多的情況下,所占用的時(shí)間是不可忽視的,。
另外,,表3則表明,內(nèi)核,、組件等的構(gòu)成系統(tǒng)大小也直接影響著啟動(dòng)的速度,,故應(yīng)當(dāng)盡量減少系統(tǒng)不必要的內(nèi)核和組件,。
由表4、表5可以看出,,在沒有修改注冊(cè)表的時(shí)候,,使用基于RAM的注冊(cè)表速度比基于Hive的注冊(cè)表的略快一些,但在修改注冊(cè)表之后,,由于前者通常需要啟動(dòng)2次,,故速度要慢于后者。
5 結(jié)語
在嵌入式操作系統(tǒng)Windows CE的開發(fā)和使用中,,系統(tǒng)的啟動(dòng)速度不僅體現(xiàn)設(shè)備的性能,,而且也直接影響到使用者的感受和體驗(yàn)。本文先介紹Windows CE的啟動(dòng)流程,,分析影響Windows CE啟動(dòng)速度的因素,,再提出一些加快啟動(dòng)速度的方案。雖然系統(tǒng)啟動(dòng)還與具體的硬件有關(guān),,在具體應(yīng)用時(shí)還需要綜合考慮,。但本文提出的方法對(duì)對(duì)基于其他硬件結(jié)構(gòu)下使用WindowsCE系統(tǒng)時(shí)優(yōu)化其啟動(dòng)速度同樣有重要的指導(dǎo)意義。