以文本方式查看主題 - 曙海教育集團(tuán)論壇 (http://www.xinguifushi.cn/bbs/index.asp) -- WinCE系統(tǒng)定制與驅(qū)動(dòng)開(kāi)發(fā) (http://www.xinguifushi.cn/bbs/list.asp?boardid=36) ---- 巧借WinCE BSP移植 嵌入式系統(tǒng)開(kāi)發(fā)有捷徑 (http://www.xinguifushi.cn/bbs/dispbbs.asp?boardid=36&id=1813) |
-- 作者:wangxinxin -- 發(fā)布時(shí)間:2010-11-26 10:31:26 -- 巧借WinCE BSP移植 嵌入式系統(tǒng)開(kāi)發(fā)有捷徑 【IT168專稿】近期,公司讓我負(fù)責(zé)一個(gè)嵌入式消費(fèi)產(chǎn)品的開(kāi)發(fā)項(xiàng)目。此產(chǎn)品原來(lái)的操作系統(tǒng)是WinCE 5.0,現(xiàn)在因應(yīng)市場(chǎng)需求不但要增加功能更加強(qiáng)大的硬件,而且公司也要求把操作系統(tǒng)升級(jí)為WinCE 6.0。在接手此項(xiàng)目后,我立即開(kāi)始進(jìn)行操作系統(tǒng)的定制開(kāi)發(fā),但結(jié)果卻是欲速則不達(dá)。 后來(lái),我在時(shí)間和成本的多重壓力因素下反思時(shí),發(fā)現(xiàn)我犯了一個(gè)致命的錯(cuò)誤,就是為了更快的把產(chǎn)品推向市場(chǎng),在開(kāi)發(fā)過(guò)程應(yīng)該是移植操作系統(tǒng)而不是重新定制操作系統(tǒng)。本文根據(jù)我在此項(xiàng)目上得到的經(jīng)驗(yàn)和總結(jié),先分析BSP移植對(duì)WinCE的重要性和影響,然后在此基礎(chǔ)上通過(guò)對(duì)Bootloader、OAL和驅(qū)動(dòng)程序的移植來(lái)具體探討B(tài)SP的移植過(guò)程。 什么是WinCE操作系統(tǒng)移植? 由于嵌入式系統(tǒng)是一個(gè)軟硬件緊密結(jié)合的系統(tǒng),因此操作系統(tǒng)移植包含兩個(gè)層面上的工作:一個(gè)層面是CPU級(jí)的,另一個(gè)層面是板級(jí)的。由于WinCE操作系統(tǒng)幾乎完全是用C語(yǔ)言編寫(xiě)的,所以可移植到眾多的32位微處理器上。這其中包括ARM、x86、MIPS和SHx等,而且CPU級(jí)的移植通常由微軟或芯片制造商來(lái)完成,這會(huì)極大地減輕0EM廠商開(kāi)發(fā)過(guò)程中移植操作系統(tǒng)的工作量,但板級(jí)層面的移植則還是需要由OEM廠商來(lái)完成的。 一般來(lái)說(shuō),一個(gè)WinCE系統(tǒng)包括四層結(jié)構(gòu):應(yīng)用程序、WinCE內(nèi)核映像、板級(jí)支持包(BSP)、硬件平臺(tái)。而基本軟件平臺(tái)則主要由WinCE系統(tǒng)內(nèi)核映像(OS Image)和板卡支持包(BSP)兩部分組成。因?yàn)閃inCE系統(tǒng)是一個(gè)軟硬件緊密結(jié)合的系統(tǒng),因此即使CPU處理器相同,但是如果開(kāi)發(fā)板上的外圍硬件不相同,這個(gè)時(shí)候還是需要修改BSP來(lái)完成一個(gè)新的BSP。因此換句話說(shuō),就是WinCE的移植過(guò)程主要是改寫(xiě)B(tài)SP的過(guò)程。 (2)什么是板級(jí)BSP移植? 從WinCE開(kāi)發(fā)文檔中我們可知,BSP是一個(gè)包括啟動(dòng)程序Bootloader、OEM適配層程序(OAL)、標(biāo)準(zhǔn)開(kāi)發(fā)板(SDB)和相關(guān)硬件設(shè)備的驅(qū)動(dòng)程序和配置文件的軟件包。其中Bootloader是加電即運(yùn)行的一段程序,它能初始化硬件,建立系統(tǒng)的內(nèi)存空間映射,為最終調(diào)用系統(tǒng)內(nèi)核做準(zhǔn)備。主要用于下載和啟動(dòng)鏡像nk.bin。而OAL則是邏輯上駐留在Windows CE內(nèi)核與目標(biāo)設(shè)備之間的代碼層,OEM廠商使用這些代碼把WinCE適配到自己的硬件上;在物理上OAL是與內(nèi)核庫(kù)連接在一起產(chǎn)生內(nèi)核可執(zhí)行文件。OAL簡(jiǎn)化了操作系統(tǒng)與目標(biāo)代碼之間的通信,OAL代碼用來(lái)處理中斷、記時(shí)器、電源管理、通用I/O控制等。最后,設(shè)備驅(qū)動(dòng)程序是指本機(jī)驅(qū)動(dòng)程序以及流接口驅(qū)動(dòng)程序。本機(jī)驅(qū)動(dòng)程序有GEWS.exe加載的鼠標(biāo)、鍵盤、觸摸屏、顯示驅(qū)動(dòng)等;而流接口驅(qū)動(dòng)程序使用一組流函數(shù)來(lái)實(shí)現(xiàn),通常由Device.exe加載,如網(wǎng)卡、聲卡、USB等
WinCE BSP移植的流程和步驟 (1)啟動(dòng)程序Bootloader的移植步驟 一般來(lái)說(shuō),對(duì)于Bootloader的功能,不同的場(chǎng)合區(qū)別很大。比如,在桌面Windows版的PC硬件平臺(tái)上,由于硬件啟動(dòng)根本就不通過(guò)Bootloader(而是通過(guò)BIOS),所以Bootloader就無(wú)需對(duì)CPU加電后的初始化做任何工作;而在嵌入式WinCE平臺(tái)上,Bootloader是最先被執(zhí)行的程序,所以就必須包括加電初始化程序,同時(shí)通常Bootloader必須包含下載WinCE映像文檔的功能。由于Bootloader會(huì)涉及到基本的硬件操作,如CPU的結(jié)構(gòu)、指令等,也會(huì)又涉及到以太網(wǎng)下載協(xié)議和映像文檔格式。因此,從零開(kāi)發(fā)實(shí)現(xiàn)的話會(huì)需要相當(dāng)長(zhǎng)的過(guò)程,通常的做法是利用微軟為每種類型的CPU提供的某種標(biāo)準(zhǔn)研發(fā)板的Bootloader例程。 根據(jù)我在這次項(xiàng)目移植得到的經(jīng)驗(yàn),Bootloader的移植步驟主要是:①是修改相應(yīng)的dir、source文件;②是修改makefile.inc;③是修改boot.bib,使其不與config.bib中的內(nèi)存分配造成沖突;④是改進(jìn)eboot,因?yàn)閑boot燒寫(xiě)NK.BIN的時(shí)候會(huì)查找BINFS分區(qū),然后把下載的image燒寫(xiě)到BINFS分區(qū)。 (2)OAL的移植步驟 從邏輯結(jié)構(gòu)上看,OAL位于WinCE操作系統(tǒng)的內(nèi)核與硬件之間,是連接WinCE系統(tǒng)與硬件的樞紐;從功能上看,OAL頗似桌面PC上的BIOS,具有初始化設(shè)備、引導(dǎo)操作系統(tǒng)以及抽象硬件功能等作用。但與B10S不同的是,0AL隸屬于操作系統(tǒng),是操作系統(tǒng)的一部分。 從我在這次項(xiàng)目中得到的經(jīng)驗(yàn)來(lái)看,Windows CE安裝目錄的子目錄中都包含有OAL的部分源碼。OAL的移植實(shí)現(xiàn)應(yīng)是在fwxsc1.s、main.c、Flash.c、Edeviceinit.c等文件中,可根據(jù)實(shí)際需要修改相應(yīng)的代碼。在OAL移植過(guò)程中,主要是修改這幾個(gè)函數(shù):修改Startup.s函數(shù)、修改串口調(diào)試函數(shù)、修改OEMInit函數(shù)、修改系統(tǒng)時(shí)鐘函數(shù)和修改中斷處理函數(shù)等。實(shí)際上,大多數(shù)情況下開(kāi)發(fā)工程師對(duì)OAL只要修改即可,甚至無(wú)需修改。 |