WINCE操作系統(tǒng)簡(jiǎn)介
WinCE操作系統(tǒng)是通用型的嵌入式操作系統(tǒng),它是一個(gè)開(kāi)放的、可升級(jí)的32位嵌入式操作系統(tǒng),是基于掌上型電腦類(lèi)的電子設(shè)備操作系統(tǒng),它是精簡(jiǎn)的Windows 95,WindowsCE的圖形用戶(hù)界面相當(dāng)出色。它1996年開(kāi)始發(fā)布Windows CE 1.0版本,2004年7月發(fā)布了Windows CE .NET 5.0版本,目前用得最多的是WindowsCE .NET 4.2版本,其發(fā)展速度也是很快的,功能_上自不必描述,它的主要應(yīng)用領(lǐng)域有PDA市場(chǎng)、PPC、Smartphone、 工業(yè)控制、醫(yī)療等。
操作系統(tǒng)移植的原因
為了更快的適應(yīng)市場(chǎng)需求,在實(shí)際開(kāi)發(fā)過(guò)程中,我們更傾向于移植操作系統(tǒng)而不是重新開(kāi)發(fā)操作系統(tǒng)。這樣不但可以節(jié)省時(shí)間,還能大大提高開(kāi)發(fā)效率。
由于嵌入式系統(tǒng)是一個(gè)軟硬件緊密結(jié)合的系統(tǒng),因此操作系統(tǒng)移植包含兩個(gè)層面上的工作:一個(gè)層面是CPU級(jí)的,另一個(gè)層面是板級(jí)的。由于WinCE操作系統(tǒng)幾乎完全是用C語(yǔ)言編寫(xiě)的,所以可移植到眾多的32位微處理器。上。這其中包括ARM、x86、MIPS 和SH等, 而且CPU級(jí)的移植通常由微軟或芯片制造商來(lái)完成,這會(huì)極大地減輕OEM廠商開(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ò)程。
嵌入式OS負(fù)責(zé)嵌入式系統(tǒng)全部軟、硬件資源的分配、調(diào)度,控制和協(xié)調(diào)各部件的工作,與普通OS相比,嵌入式OS在系統(tǒng)實(shí)時(shí)高效性、硬件依賴(lài)性、軟件固化及應(yīng)用的專(zhuān)用性方面具有較為突出的特點(diǎn)。
WINCE在ARM平臺(tái)的移植及驅(qū)動(dòng)技術(shù)
1、啟勵(lì)程序Bootloader的移植步驟
BootLoader就是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一段小程序。通過(guò)這段小程序,我們可以初始化硬件設(shè)備、建立內(nèi)存空間映射圖,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),以便為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境。在嵌入式系統(tǒng)中,通常并沒(méi)有像BIOS那樣的固件程序(有的嵌入式CPU也會(huì)內(nèi)嵌一段短小的啟動(dòng)程序),因此整個(gè)系統(tǒng)的加載啟動(dòng)任務(wù)就完全由BootLoader來(lái)完成。
修改Bootloader是移植WinCE系統(tǒng)第一步,也是關(guān)鍵的一步。只有得到一個(gè)穩(wěn)定工作的啟動(dòng)程序,才能夠進(jìn)-步完成WinCE BSP的移植。Bootloader主要用來(lái)管理目標(biāo)平臺(tái)的啟動(dòng)過(guò)程,它是一段單獨(dú)的程序代碼,通過(guò)這段小程序可以初始化硬件設(shè)備、建立內(nèi)存空間的映射圖和下載操作系統(tǒng)的映像文件等,從而將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適的狀態(tài),它- -般存放于目標(biāo)平臺(tái)的非易失存儲(chǔ)介質(zhì)中, 如ROM或Flash。
一般來(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ò)程,通常的做法是利用微軟為每種類(lèi)型的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的移植步驟
OAL的全稱(chēng)是OEMAdaption Layer,即原始設(shè)備制造商適配層。它是位于Windows CE內(nèi)核和目標(biāo)硬件平臺(tái)之間的一個(gè)代碼層,OAL主要負(fù)責(zé)WindowsCE與硬件通信,它與CPU、中斷、內(nèi)存、時(shí)鐘和調(diào)試口等核心設(shè)備相關(guān),也是OAL各個(gè)模塊代碼被編譯后(.lib) 和其它內(nèi)核庫(kù)鏈接到一一起形成Windows CE的內(nèi)核可執(zhí)行文檔NK.EXE的關(guān)鍵。簡(jiǎn)單的說(shuō),OAL就是用來(lái)屏蔽CPU平臺(tái)的細(xì)節(jié)和抽象硬件功能,以實(shí)現(xiàn)操作系統(tǒng)內(nèi)核的可移植性。
從邏輯結(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)的一部分。在WinCE6.0中,OAL首先起了穿針引線的作用,這一點(diǎn)可從其啟動(dòng)代碼看出來(lái)。第二個(gè)作用,暴露一些OEM函數(shù)供Kerel調(diào)用,具體哪些函數(shù)由OEMGLOBAL決定。為了方便BSP的升級(jí),6.0基本保留了原來(lái)的函數(shù)結(jié)構(gòu)。所以,我們可以選擇5.0的BSP為參考,將其移植到6.0上來(lái)。PB6.0 的安裝目錄中也包涵一些BSP,其中DeviceEmulator就是模擬S3C2410平臺(tái)。所以,我們也可以此為參考。總之,OAL代碼的來(lái)源不是問(wèn)題。問(wèn)題是如何快速編譯這些代碼,并驗(yàn)證其正確性。
下面將介紹快速調(diào)試OAL的方法。
首先Clone一個(gè)BSP,命名為2410Tiny。如果從5.0的BSP移植,需要修改相應(yīng)的目錄結(jié)構(gòu),在6.0中不存在CEC文件,需要做轉(zhuǎn)換。Clone完成后的BSP如下圖所示:
其中CATALOG目錄中存放的是2410Tiny.pbcxml,它是CE6.0中BSP的組織文件,類(lèi)似5.0中的CEC文件。CESYSGEN存放了一個(gè)Makefile文件。
FILES目錄存放了平臺(tái)對(duì)應(yīng)的配置文件如BIB、REG等。這里我們將platform.bib和platform.reg中的內(nèi)容清空,注意是清空! Config.bib 的內(nèi)容確保準(zhǔn)確。
刪除SRC目錄下的Drivers目錄,并修改dirs文件,去掉Drivers行。如下圖所示:
至此,2410Tiny的BSP準(zhǔn)備完成,用此BSP定制一個(gè)OSDesign。在選擇模板時(shí)選CustomDevice (第二項(xiàng)),然后直接點(diǎn)擊完成,結(jié)束向?qū)?。進(jìn)入平臺(tái)屬性頁(yè)進(jìn)行設(shè)置,如下圖所示:
完成后,在Catalog Items中選中CEDB Database Engine項(xiàng)(我開(kāi)始沒(méi)選擇該項(xiàng),結(jié)果編譯出了一堆錯(cuò)誤,將該項(xiàng)選中后,重新編譯,就順利通過(guò)了。)點(diǎn)擊編譯按鈕開(kāi)始編譯系統(tǒng)。
等它編譯著吧,我們繼續(xù)往下看。之所以能把SRC目錄下的Drivers刪除,是因?yàn)槲覀儸F(xiàn)在還處于調(diào)試OAL的階段,可以暫時(shí)不考慮Drivers。只要有OAL和KERNEL,WinCE 就能跑起來(lái)。從這個(gè)角度來(lái)說(shuō),我覺(jué)得OAL用來(lái)抹平MCU的差異,而Drivers則是抹平外圍設(shè)備的差異。
大概10分鐘后,編譯完成了,最終生成的NK.bin文件有3M多,如下圖所示:
這時(shí),我們可以啟動(dòng)BOOTLOADER,完成相關(guān)配置后下載該NK.bin文件,如下圖所示:
3M多的NK,下載需要14秒左右。由于啟用了KITL,所以最終在DebugOutput中看到WinCE啟動(dòng)的相關(guān)信息,如下圖所示:
現(xiàn)在我們可以用PB6.0的Debug工具進(jìn)行簡(jiǎn)單調(diào)試。先用Target Control查看系統(tǒng)運(yùn)行的進(jìn)程:
可以看到,目前WinCE6.0只運(yùn)行了兩個(gè)進(jìn)程,NK.exe對(duì)應(yīng)的就是我們的OAL.exe!再看看線程和模塊的情況:
至此,可以認(rèn)為WinCE6.0 的OAL已經(jī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ú)需修改。
3、驅(qū)動(dòng)程序的移植和開(kāi)發(fā)
驅(qū)動(dòng)程序(Device Drivers)是指能夠管理虛擬或者物理設(shè)備、協(xié)議、服務(wù)等的一段軟件模塊,操作系統(tǒng)是通過(guò)驅(qū)動(dòng)程序直接和硬件打交道的。設(shè)備驅(qū)動(dòng)程序能為WinCE提供設(shè)備控制功能, 包括: LCD/LED/VGA/SVGA顯示設(shè)備、鼠標(biāo)、鍵盤(pán)和觸摸屏等。根據(jù)我在這次項(xiàng)目移植得到的經(jīng)驗(yàn),建議設(shè)備驅(qū)動(dòng)程序的移植可通過(guò)Platform Builder創(chuàng)建一一個(gè)新的平臺(tái),然后再根據(jù)硬件平臺(tái)的需要插入和移除驅(qū)動(dòng)。一般來(lái)說(shuō),需要修改的文件有Plaform. Bib、Platform. reg及驅(qū)動(dòng)程序源代碼等。
4、平臺(tái)文件配置的修改
平臺(tái)配置文件包括源代碼配置文件和操作系統(tǒng)鏡像配置文件。源代碼配置文件主要是告訴Build工具需要用到的路徑,包括Dirs文件、Sources 文件和Makefile文件等。操作系統(tǒng)鏡像配置文件則主要用于給Makeimag工具生成操作系統(tǒng)鏡像,包括.bib、.reg、 .dat、 .db等文件。因此,在進(jìn)行BSP移植的時(shí)候,也需要對(duì)這些平臺(tái)配置文件進(jìn)行適當(dāng)?shù)男薷暮妥兏?/p>
5、移植時(shí)需特別注意的地方
很多嵌入式開(kāi)發(fā)實(shí)踐都證明BSP移植是一個(gè)挺復(fù)雜、煩瑣的過(guò)程。因?yàn)閃inCE不同版本的BSP包的組織結(jié)構(gòu)是不同的,所以會(huì)導(dǎo)致很多鏈接庫(kù)無(wú)法找到或者是這些庫(kù)已經(jīng)被替換、刪除,唯一的方法是只有耐心的根據(jù)錯(cuò)誤提示來(lái)一一定位修改。
例如,在移植Bootloader時(shí)因?yàn)锽ootloader的下載、燒寫(xiě)、啟動(dòng)鏡像過(guò)程會(huì)涉及到內(nèi)存地址,所以在處理各種入口地址時(shí)應(yīng)該要避免出現(xiàn)差錯(cuò)或內(nèi)存超出范圍,尤其是處理地址沖突時(shí)需要特別小心。還有在移植OAL時(shí), startup.s以及OEMInitDebugSerial兩個(gè)函數(shù)需要特別注意,因?yàn)樗鼈冎饕浅跏蓟布按?,系統(tǒng)運(yùn)行及驅(qū)動(dòng)調(diào)試的基礎(chǔ),如果硬件配置以及調(diào)試串口有改變,則需要適當(dāng)?shù)男薷?/p>
-
ARM
+關(guān)注
關(guān)注
134文章
9310瀏覽量
375087 -
WinCE
+關(guān)注
關(guān)注
3文章
128瀏覽量
49547
發(fā)布評(píng)論請(qǐng)先 登錄
[推薦]深圳WINCE專(zhuān)業(yè)平臺(tái)開(kāi)發(fā)團(tuán)隊(duì),提供WINCE平臺(tái)的硬件定制,內(nèi)核驅(qū)動(dòng)定制
ARM7&ARM9雙核平臺(tái)的技術(shù)分析
Microwindows在ARM平臺(tái)的移植
Tars在ARM平臺(tái)上的移植是如何去實(shí)現(xiàn)的
基于嵌入式ARM & WinCE 的小型監(jiān)控系統(tǒng)的設(shè)計(jì)
uCOSII在LPC2210上的移植詳解
WinCE系統(tǒng)應(yīng)用程序的可移植性問(wèn)題

基于ARM-WinCE平臺(tái)的時(shí)鐘同步設(shè)計(jì)

基于嵌入式ARM&WinCE的小型監(jiān)控系統(tǒng)的設(shè)計(jì)
ARM平臺(tái)設(shè)備WinCE下UART配置
詳解μC/OS-II在ARM平臺(tái)上移植
基于ARM-WinCE平臺(tái)時(shí)鐘同步的設(shè)計(jì)(全解析)

嵌入式設(shè)計(jì)經(jīng)驗(yàn):ARM-WinCE平臺(tái)時(shí)鐘同步設(shè)計(jì)

評(píng)論