新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > WindowsCE開(kāi)發(fā)過(guò)程

WindowsCE開(kāi)發(fā)過(guò)程

——
作者: 時(shí)間:2007-02-28 來(lái)源:http://www.eoot.cn/ 收藏

一、概述

WindowsCE是Mirosoft公司推出的一款嵌入式系統(tǒng),同時(shí)還推出了Platform Builder開(kāi)發(fā)工具和CETK測(cè)試工具,再加上MS其他的開(kāi)發(fā)和管理工具,使得技術(shù)開(kāi)發(fā)和項(xiàng)目管理WindowsCE項(xiàng)目變得非常簡(jiǎn)便。目前WindowsCE以其良好的人機(jī)界面、豐富可靠的應(yīng)用程序逐漸為廠家所接受,在無(wú)線通信、工業(yè)控制、電子消費(fèi)類(lèi)產(chǎn)品中,占有越來(lái)越多的市場(chǎng)份額。對(duì)于開(kāi)發(fā)者來(lái)講,MS為了開(kāi)發(fā)方便,對(duì)于不同的CPU平臺(tái),提供了不同的參考模型,并在一定程度上開(kāi)放了源代碼,使開(kāi)發(fā)者能夠更多地控制操作系統(tǒng),并能迅速地做出個(gè)性化的產(chǎn)品。特別是MS的開(kāi)發(fā)工具和測(cè)試工具,大大降低了門(mén)檻,提高了工作效率,縮短了產(chǎn)品開(kāi)發(fā)周期,減少了產(chǎn)品售后服務(wù)所帶來(lái)的支出??紤]到WindowsCE的授權(quán)費(fèi)用,在小批量生產(chǎn)的產(chǎn)品中,綜合以上因素,使用WindowsCE的成本,并不得比使用其他操作系統(tǒng)高。

開(kāi)發(fā)WindowsCE產(chǎn)品的最佳教材,就是MSDN。本文只是簡(jiǎn)單的描述了WindowsCE的一個(gè)基本開(kāi)發(fā)和測(cè)試的過(guò)程,讓大家對(duì) WindowsCE的開(kāi)發(fā)和測(cè)試,有一個(gè)大概的了解。

二、使用Platform Builder開(kāi)發(fā)BSP

Platform Builder是Microsoft公司出品的,專門(mén)為開(kāi)發(fā)WindowsCE的集成開(kāi)發(fā)環(huán)境。在該環(huán)境中,開(kāi)發(fā)者可以使用豐富的工具,創(chuàng)建、裁減、調(diào)試目標(biāo)操作系統(tǒng)。WindowsCE的開(kāi)發(fā)過(guò)程大概可以分為:OAL、驅(qū)動(dòng)、應(yīng)用程序開(kāi)發(fā)三個(gè)步驟。本文只是對(duì)OAL和驅(qū)動(dòng)的開(kāi)發(fā)過(guò)程做一個(gè)大概的介紹,對(duì)應(yīng)用程序的開(kāi)發(fā)不與討論。

A、 WindowsCE結(jié)構(gòu)介紹

在開(kāi)發(fā)一個(gè)操作系統(tǒng)前,必須要對(duì)操作系統(tǒng)的層次結(jié)構(gòu)有所了解。下圖是WindowsCE的體系結(jié)構(gòu)圖。

在硬件之上,就是操作系統(tǒng)了。其中的kernel是MS提供的庫(kù),用于內(nèi)存管理、進(jìn)程、線程的調(diào)度等,是沒(méi)有源代碼的。而OEM Layer則是有參考模型和源代碼的,Platform Builder也主要是用來(lái)開(kāi)發(fā)OEM層。其中:

Bootloader:主要負(fù)責(zé)將編譯好的映像文件放入內(nèi)存中;

OEM Adaptation Layer(OAL):負(fù)責(zé)對(duì)硬件進(jìn)行初始化和連接Kernel部分;

Driver:負(fù)責(zé)對(duì)外圍設(shè)備的驅(qū)動(dòng)。

Platform Builder對(duì)一些標(biāo)準(zhǔn)硬件開(kāi)發(fā)板提供了BSP(board support package),而這些標(biāo)準(zhǔn)板使用的是業(yè)界常用的CPU和外圍設(shè)備。換句話說(shuō)就是:對(duì)常用類(lèi)型的CPU和外圍設(shè)備,Platform Builder都提供了Bootloader、OAL、Driver的源代碼,只要使用Platform Builder對(duì)已有的BSP進(jìn)行剪裁和稍做修改,再加上MS提供的內(nèi)核,就能驅(qū)動(dòng)大多數(shù)的硬件設(shè)備。而且Platform Builder還提供了豐富的標(biāo)準(zhǔn)應(yīng)用程序和服務(wù)程序,在開(kāi)發(fā)好OEM層之后,再加上這些應(yīng)用和服務(wù),就能讓用戶的硬件平臺(tái)工作起來(lái)。

當(dāng)然,如果用戶使用了自己設(shè)計(jì)的CPU或者外圍硬件設(shè)備,開(kāi)發(fā)過(guò)程要復(fù)雜的多。但是MS對(duì)OAL、驅(qū)動(dòng)、Bootloader的開(kāi)發(fā)步驟和接口,都有嚴(yán)格的定義。因此在MSDN的幫助下,再對(duì)照參考模型,這個(gè)過(guò)程往往比想象的簡(jiǎn)單多。

B、BSP的開(kāi)發(fā)

在這里,假設(shè)有一塊開(kāi)發(fā)板,使用MIPSII的CPU,那么就可以利用Platform Builder提供的MIPSII開(kāi)發(fā)板的BSP原型,迅速的生成自己的BSP。

在Platform Builder中,在菜單Platform中選BSP Wizard,彈出下圖對(duì)話框。

選中“Clone an existing BSP”,因?yàn)锳MD DBAu1500的體系結(jié)構(gòu)是MIPSII的,因此在下拉列表中選取AMD DBAu1500,然后點(diǎn)“Next”。出現(xiàn)下圖所示對(duì)話框。

每一個(gè)BSP都對(duì)應(yīng)了一個(gè)cec文件。在該文件中記錄了有關(guān)該開(kāi)發(fā)扳的信息。比如CPU類(lèi)型,開(kāi)發(fā)板上有哪些外圍設(shè)備,它們?cè)谙到y(tǒng)使用的名稱、GUID、全局變量等。因此也必須給新的BSP生成的cec文件起個(gè)名字。這里命名為NewBSP。單擊“Next”。

這時(shí)出現(xiàn)Catalog Information對(duì)話框。在這個(gè)對(duì)話框中填入該BSP的顯示名稱,發(fā)行商名,和BSP描述即可。單擊“Next”。

在Directory and CPU對(duì)話框中,為新生成的BSP選擇路徑和指定CPU類(lèi)型。單擊“Next”。此時(shí)彈出Customization對(duì)話框,如下圖所示。

在這里,可以根據(jù)自己開(kāi)發(fā)板上的外圍設(shè)備進(jìn)行,對(duì)BSP中的驅(qū)動(dòng)進(jìn)行調(diào)整,比如是否需要Bootloader等。該驅(qū)動(dòng)列表是對(duì)應(yīng)于某塊DBAu1500開(kāi)發(fā)板的外圍設(shè)備的。如果自己的開(kāi)發(fā)板上沒(méi)有這些設(shè)備,則可以刪除掉。如果自己的開(kāi)發(fā)板上的設(shè)備型號(hào)和類(lèi)型與列表中的不相符,可以選擇添加(如果有第三方提供的驅(qū)動(dòng)程序),也可以選擇編輯已有驅(qū)動(dòng)的方法。由于現(xiàn)在同一類(lèi)型的設(shè)備大同小異,因此驅(qū)動(dòng)結(jié)構(gòu)也基本一樣,那么為什么不利用已經(jīng)有的驅(qū)動(dòng),發(fā)揚(yáng)拿來(lái)主義的精神呢?單擊“Next”,初步完成了一個(gè)新BSP。

下面的任務(wù)就是要對(duì)已經(jīng)生成的BSP進(jìn)行修改,以讓其更加符合實(shí)際開(kāi)發(fā)板的需求。辦法很簡(jiǎn)單,在Platform Builder的File菜單中選取“New Platform”,創(chuàng)建一個(gè)新的工程。注意在創(chuàng)建的第三步,選擇BSP的時(shí)候,要選擇剛剛生成的NewBSP。其他步驟根據(jù)提示進(jìn)行就可以了。

在Platform Builder內(nèi),根據(jù)開(kāi)發(fā)板的實(shí)際情況,參考硬件說(shuō)明書(shū),對(duì)相應(yīng)的設(shè)備驅(qū)動(dòng)和OAL層進(jìn)行修改。修改完畢后,編譯并生成映像文件,就可以下載到硬件平臺(tái)上進(jìn)行調(diào)試和修改bug的工作了。

三、使用CETK進(jìn)行測(cè)試

在提供了開(kāi)發(fā)工具的同時(shí),MS還提供了一整套測(cè)試工具,對(duì)用戶創(chuàng)建的WindowsCE操作系統(tǒng)進(jìn)行測(cè)試,這套工具就是Microsoft® Windows® CE Test Kit (CETK)。該工具將一系列基于命令行測(cè)試工具圖形化,用來(lái)檢驗(yàn)各個(gè)驅(qū)動(dòng)程序是否正確。

CETK工具包括兩部分,一部分是在開(kāi)發(fā)平臺(tái)(PC)上的服務(wù)器應(yīng)用,一部分是在目標(biāo)平臺(tái)上的客戶端應(yīng)用。因此在使用CETK時(shí),必須首先把客戶端應(yīng)用程序下載到目標(biāo)機(jī)上。如何下載的辦法很多,比如使用PB中的Remote File Viewer,或者使用FTP服務(wù)從客戶端下載,或者使用CETK自帶的Connection工具等。本文描述的場(chǎng)景是脫離BSP開(kāi)發(fā)過(guò)程,直接面對(duì)一個(gè)已經(jīng)開(kāi)發(fā)完畢的目標(biāo)平臺(tái),如何使用CETK進(jìn)行測(cè)試。

A、 測(cè)試過(guò)程

對(duì)于一個(gè)已經(jīng)開(kāi)發(fā)好的目標(biāo)平臺(tái)進(jìn)行CETK測(cè)試,首先要了解幾點(diǎn):

該目標(biāo)平臺(tái)上運(yùn)行的Windows CE版本號(hào)是多少;

該目標(biāo)平臺(tái)的CPU結(jié)構(gòu)是什么;

該目標(biāo)平臺(tái)中是否安裝了CETK客戶端;

該目標(biāo)平臺(tái)上都有哪些硬件設(shè)備,它們分別支持哪些特性;

因?yàn)椴煌牡腤indows CE版本使用不同的CETK版本;另外不同的CPU類(lèi)型使用不同的客戶端。特別是CETK是一個(gè)硬件特性的全集,其中的一些硬件特性也許現(xiàn)有的硬件平臺(tái)并不具備,因此必須了解清楚現(xiàn)有目標(biāo)平臺(tái)的特性再進(jìn)行測(cè)試,以免引起不必要的麻煩。在了解清楚以上幾點(diǎn)后,就可以進(jìn)行CETK的測(cè)試了。

1、 準(zhǔn)備測(cè)試環(huán)境:

既然CETK有服務(wù)器端和客戶端,那么它們之間至少應(yīng)該通過(guò)某一種技術(shù)手段,使之連接起來(lái)。目前對(duì)于絕大多數(shù)嵌入式設(shè)備來(lái)說(shuō),都具有至少一個(gè)網(wǎng)絡(luò)設(shè)備。因此這里假設(shè)服務(wù)器端和客戶端是通過(guò)局域網(wǎng)進(jìn)行連接的。在測(cè)試開(kāi)始前,需要通過(guò)服務(wù)器端和客戶端的網(wǎng)絡(luò)設(shè)置程序,將它們?cè)O(shè)置在同一個(gè)網(wǎng)段之內(nèi),可以互相訪問(wèn)。

2、 從開(kāi)始菜單的Microsoft Windows CE組中啟動(dòng)Windows CE .NET Test Kit。

3、 下載并運(yùn)行客戶端軟件:

如果現(xiàn)有的硬件平臺(tái)中,并沒(méi)有包含CETK客戶端軟件clientside.exe,那么必須通過(guò)某種方式下載到硬件平臺(tái)上。該客戶端軟件在Windows CE 安裝目錄中。在了解目標(biāo)機(jī)的CPU類(lèi)型后,下載WINCEROOTOTHERSWCETKCPU typeclientside.exe到目標(biāo)平臺(tái)上。由于假設(shè)服務(wù)器和目標(biāo)平臺(tái)都在同一個(gè)局域網(wǎng)內(nèi),因此可以通過(guò)文件共享或者FTP等方式將其拷貝到目標(biāo)機(jī)上。

下載完畢后,打開(kāi)目標(biāo)機(jī)的一個(gè)控制臺(tái)(SHELL),進(jìn)入clientside.exe所在目錄,用命令行上輸入:clientside.exe /n=服務(wù)器IP地址 /p=5555。

4、 設(shè)置測(cè)試項(xiàng)目:

在客戶端運(yùn)行了clientside后,過(guò)幾秒鐘后,在服務(wù)器的Windows CE .NET Test Kit中將顯示出目標(biāo)設(shè)備的名字及可檢測(cè)單元。如下圖所示。


CETK通過(guò)連接到客戶端程序,自動(dòng)獲取目標(biāo)設(shè)備上的設(shè)備信息,并自動(dòng)確定可以測(cè)試的項(xiàng)目。從上圖可以知道,該硬件設(shè)備不包含聲卡、紅外、鼠標(biāo)設(shè)備等。可以測(cè)試的項(xiàng)目包括顯卡、調(diào)制解調(diào)器等。因?yàn)橛布O(shè)備種類(lèi)繁多,因此該硬件掃描在具體細(xì)節(jié)上不見(jiàn)得準(zhǔn)確。比如顯示卡如果不支持Direct3D功能,就不能進(jìn)行該功能的測(cè)試。這也就是為什么用戶必須事先知道目標(biāo)設(shè)備的具體硬件信息的原因。

每個(gè)單獨(dú)的設(shè)備都有一些可選的測(cè)試項(xiàng),測(cè)試人員可以通過(guò)項(xiàng)目前的方框,選中或者取消一些項(xiàng)目的測(cè)試。

5、 設(shè)置測(cè)試命令行

如果要測(cè)試一個(gè)項(xiàng)目,先用鼠標(biāo)選取該項(xiàng)目,然后點(diǎn)右鍵,將彈出一個(gè)菜單。在該項(xiàng)測(cè)試完畢前,菜單中的“View Results”選項(xiàng)是灰色的。選中“Edit Command Line”,將出現(xiàn)下圖所示對(duì)話框。

CETK從本質(zhì)上講,其實(shí)就是一套完整的測(cè)試用例的集合,而每個(gè)測(cè)試用例都是一個(gè)應(yīng)用程序。在測(cè)試過(guò)程中,所要測(cè)試的硬件特性,其實(shí)是對(duì)應(yīng)于驅(qū)動(dòng)程序中的某些函數(shù)調(diào)用。因此測(cè)試用例就是調(diào)用相關(guān)的驅(qū)動(dòng)程序中的函數(shù),并通過(guò)檢測(cè)函數(shù)運(yùn)行結(jié)果來(lái)判斷驅(qū)動(dòng)程序是否正確的。MS提供了CETK工具的同時(shí),也提供了這樣一套完備的測(cè)試用例。如果開(kāi)發(fā)者使用了自己設(shè)計(jì)、或者是已有BSP中沒(méi)有的設(shè)備,在測(cè)試該設(shè)備的時(shí)候,就需要測(cè)試人員根據(jù)設(shè)備的特性及驅(qū)動(dòng)程序,自行編寫(xiě)測(cè)試用例。

下圖顯示的對(duì)話框是對(duì)網(wǎng)卡進(jìn)行測(cè)試的命令行。

其中tux是一個(gè)32位的客戶/服務(wù)器程序,負(fù)責(zé)測(cè)試動(dòng)態(tài)鏈接庫(kù)中的功能模塊。對(duì)于不同的動(dòng)態(tài)鏈接庫(kù)及其中的模塊,當(dāng)然要使用不同的命令行。因此測(cè)試者在進(jìn)行工作前,必須要Windows CE .NET Test Kit的幫助文檔,了解不同模塊和不同功能所對(duì)應(yīng)的命令行。

6、 開(kāi)始測(cè)試:

如果僅僅對(duì)選中的一個(gè)項(xiàng)目進(jìn)行測(cè)試,則選中菜單中的“Quick Start”即可。如果要對(duì)所有選定的項(xiàng)目進(jìn)行測(cè)試,則要在Windows CE .NET Test Kit的菜單中選Tests->Start/Stop tests。

有些測(cè)試不需要人工干預(yù),程序會(huì)自動(dòng)完成。但是有些測(cè)試(比如鼠標(biāo)、鍵盤(pán)等),在測(cè)試過(guò)程中包含人機(jī)交互的部分。因此測(cè)試人員在測(cè)試過(guò)程中,需要根據(jù)目標(biāo)設(shè)備屏幕上的提示,進(jìn)行相應(yīng)的動(dòng)作。

7、 查看測(cè)試報(bào)告:

在測(cè)試完畢后,菜單中的View Results將自動(dòng)處于允許狀態(tài),選中得以查看該模塊的測(cè)試結(jié)果。

在CETKParser的顯示區(qū)域被分成三個(gè)窗口,最上面的窗口顯示了此模塊檢測(cè)的綜合參數(shù),中間窗口顯示的是用于此模塊測(cè)試的所有用例和最終結(jié)果。當(dāng)選中其中一個(gè)用例時(shí),在最下面的窗口中就會(huì)顯示此用例的測(cè)試詳細(xì)信息。上面論述過(guò),測(cè)試用例其實(shí)就是調(diào)用驅(qū)動(dòng)程序中的某些函數(shù),因此通過(guò)分析失敗的測(cè)試用例的代碼,就可以初步確定失敗在驅(qū)動(dòng)的哪個(gè)函數(shù)中。將信息提供給開(kāi)發(fā)者后,開(kāi)發(fā)者再使用PB提供的調(diào)試工具,就能迅速定位和解決程序中的問(wèn)題。

B、壓力測(cè)試

使用CETK還可以進(jìn)行壓力測(cè)試。所謂的壓力測(cè)試就是讓目標(biāo)平臺(tái)工作在極限狀態(tài)中的一種測(cè)試方法。通過(guò)壓力測(cè)試,能發(fā)現(xiàn)目標(biāo)平臺(tái)一些單一測(cè)試不能發(fā)現(xiàn)的、隱藏很深的問(wèn)題。在Windows CE .NET Test Kit的菜單中選other Test->Modular Stress Test,就可以進(jìn)行壓力測(cè)試。

壓力測(cè)試的項(xiàng)目也是可選的。所進(jìn)行壓力測(cè)試的項(xiàng)目定義在 Program FilesWindows CE Platform BuilderVERSIONcepbwcetkddtkarmv4oemstress.ini文件中。該文件的格式和內(nèi)容一目了然,通過(guò)修改該文件,就能夠確定進(jìn)行壓力測(cè)試的模塊和項(xiàng)目。

進(jìn)行完壓力測(cè)試后,View Results顯示界面與其他結(jié)果不同,是一個(gè)表格,由于版面和篇幅的關(guān)系,這里不把該圖完全顯示出來(lái),只顯示其中的一部分。在表格中,對(duì)開(kāi)發(fā)者意義比較大的是“System Health”、“Modules Status”兩表,如下圖所示。從“System Health”中可以看到,在壓力測(cè)試前內(nèi)存使用了20%,在測(cè)試后,內(nèi)存使用情況為33%,這說(shuō)明在壓力測(cè)試前后有內(nèi)存的泄露。因此可以進(jìn)一步判斷,內(nèi)存的泄露在壓力測(cè)試中所使用的函數(shù)中。

而“Modules Status”中,是對(duì)各個(gè)模塊進(jìn)行壓力測(cè)試的用例統(tǒng)計(jì)。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉