新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > WindowsCE開發(fā)過程

WindowsCE開發(fā)過程

——
作者: 時間:2007-02-28 來源:http://www.eoot.cn/ 收藏

一、概述

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

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

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

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

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

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

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

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

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

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

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

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

B、BSP的開發(fā)

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

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

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

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

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

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

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

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

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

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

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

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

A、 測試過程

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

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

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

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

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

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

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

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

2、 從開始菜單的Microsoft Windows CE組中啟動Windows CE .NET Test Kit。

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

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

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

4、 設(shè)置測試項目:

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


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

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

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

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

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

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

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

6、 開始測試:

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

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

7、 查看測試報告:

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

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

B、壓力測試

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

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

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

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



評論


相關(guān)推薦

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

關(guān)閉