WindowsCE開發(fā)過程
一、概述
WindowsCE是Mirosoft公司推出的一款嵌入式系統(tǒng),同時還推出了Platform Builder開發(fā)工具和CETK測試工具,再加上MS其他的開發(fā)和管理工具,使得技術開發(fā)和項目管理WindowsCE項目變得非常簡便。目前WindowsCE以其良好的人機界面、豐富可靠的應用程序逐漸為廠家所接受,在無線通信、工業(yè)控制、電子消費類產(chǎn)品中,占有越來越多的市場份額。對于開發(fā)者來講,MS為了開發(fā)方便,對于不同的CPU平臺,提供了不同的參考模型,并在一定程度上開放了源代碼,使開發(fā)者能夠更多地控制操作系統(tǒng),并能迅速地做出個性化的產(chǎn)品。特別是MS的開發(fā)工具和測試工具,大大降低了門檻,提高了工作效率,縮短了產(chǎn)品開發(fā)周期,減少了產(chǎn)品售后服務所帶來的支出??紤]到WindowsCE的授權費用,在小批量生產(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嵌入式操作系統(tǒng)的集成開發(fā)環(huán)境。在該環(huán)境中,開發(fā)者可以使用豐富的工具,創(chuàng)建、裁減、調試目標操作系統(tǒng)。WindowsCE的開發(fā)過程大概可以分為:OAL、驅動、應用程序開發(fā)三個步驟。本文只是對OAL和驅動的開發(fā)過程做一個大概的介紹,對應用程序的開發(fā)不與討論。
A、 WindowsCE結構介紹
在開發(fā)一個操作系統(tǒng)前,必須要對操作系統(tǒng)的層次結構有所了解。下圖是WindowsCE的體系結構圖。
在硬件之上,就是操作系統(tǒng)了。其中的kernel是MS提供的庫,用于內存管理、進程、線程的調度等,是沒有源代碼的。而OEM Layer則是有參考模型和源代碼的,Platform Builder也主要是用來開發(fā)OEM層。其中:
Bootloader:主要負責將編譯好的映像文件放入內存中;
OEM Adaptation Layer(OAL):負責對硬件進行初始化和連接Kernel部分;
Driver:負責對外圍設備的驅動。
Platform Builder對一些標準硬件開發(fā)板提供了BSP(board support package),而這些標準板使用的是業(yè)界常用的CPU和外圍設備。換句話說就是:對常用類型的CPU和外圍設備,Platform Builder都提供了Bootloader、OAL、Driver的源代碼,只要使用Platform Builder對已有的BSP進行剪裁和稍做修改,再加上MS提供的內核,就能驅動大多數(shù)的硬件設備。而且Platform Builder還提供了豐富的標準應用程序和服務程序,在開發(fā)好OEM層之后,再加上這些應用和服務,就能讓用戶的硬件平臺工作起來。
當然,如果用戶使用了自己設計的CPU或者外圍硬件設備,開發(fā)過程要復雜的多。但是MS對OAL、驅動、Bootloader的開發(fā)步驟和接口,都有嚴格的定義。因此在MSDN的幫助下,再對照參考模型,這個過程往往比想象的簡單多。
B、BSP的開發(fā)
在這里,假設有一塊開發(fā)板,使用MIPSII的CPU,那么就可以利用Platform Builder提供的MIPSII開發(fā)板的BSP原型,迅速的生成自己的BSP。
在Platform Builder中,在菜單Platform中選BSP Wizard,彈出下圖對話框。
選中“Clone an existing BSP”,因為AMD DBAu1500的體系結構是MIPSII的,因此在下拉列表中選取AMD DBAu1500,然后點“Next”。出現(xiàn)下圖所示對話框。
每一個BSP都對應了一個cec文件。在該文件中記錄了有關該開發(fā)扳的信息。比如CPU類型,開發(fā)板上有哪些外圍設備,它們在系統(tǒng)使用的名稱、GUID、全局變量等。因此也必須給新的BSP生成的cec文件起個名字。這里命名為NewBSP。單擊“Next”。
這時出現(xiàn)Catalog Information對話框。在這個對話框中填入該BSP的顯示名稱,發(fā)行商名,和BSP描述即可。單擊“Next”。
在Directory and CPU對話框中,為新生成的BSP選擇路徑和指定CPU類型。單擊“Next”。此時彈出Customization對話框,如下圖所示。
在這里,可以根據(jù)自己開發(fā)板上的外圍設備進行,對BSP中的驅動進行調整,比如是否需要Bootloader等。該驅動列表是對應于某塊DBAu1500開發(fā)板的外圍設備的。如果自己的開發(fā)板上沒有這些設備,則可以刪除掉。如果自己的開發(fā)板上的設備型號和類型與列表中的不相符,可以選擇添加(如果有第三方提供的驅動程序),也可以選擇編輯已有驅動的方法。由于現(xiàn)在同一類型的設備大同小異,因此驅動結構也基本一樣,那么為什么不利用已經(jīng)有的驅動,發(fā)揚拿來主義的精神呢?單擊“Next”,初步完成了一個新BSP。
下面的任務就是要對已經(jīng)生成的BSP進行修改,以讓其更加符合實際開發(fā)板的需求。辦法很簡單,在Platform Builder的File菜單中選取“New Platform”,創(chuàng)建一個新的工程。注意在創(chuàng)建的第三步,選擇BSP的時候,要選擇剛剛生成的NewBSP。其他步驟根據(jù)提示進行就可以了。
在Platform Builder內,根據(jù)開發(fā)板的實際情況,參考硬件說明書,對相應的設備驅動和OAL層進行修改。修改完畢后,編譯并生成映像文件,就可以下載到硬件平臺上進行調試和修改bug的工作了。
三、使用CETK進行測試
在提供了開發(fā)工具的同時,MS還提供了一整套測試工具,對用戶創(chuàng)建的WindowsCE操作系統(tǒng)進行測試,這套工具就是Microsoft® Windows® CE Test Kit (CETK)。該工具將一系列基于命令行測試工具圖形化,用來檢驗各個驅動程序是否正確。
CETK工具包括兩部分,一部分是在開發(fā)平臺(PC)上的服務器應用,一部分是在目標平臺上的客戶端應用。因此在使用CETK時,必須首先把客戶端應用程序下載到目標機上。如何下載的辦法很多,比如使用PB中的Remote File Viewer,或者使用FTP服務從客戶端下載,或者使用CETK自帶的Connection工具等。本文描述的場景是脫離BSP開發(fā)過程,直接面對一個已經(jīng)開發(fā)完畢的目標平臺,如何使用CETK進行測試。
A、 測試過程
對于一個已經(jīng)開發(fā)好的目標平臺進行CETK測試,首先要了解幾點:
該目標平臺上運行的Windows CE版本號是多少;
該目標平臺的CPU結構是什么;
該目標平臺中是否安裝了CETK客戶端;
該目標平臺上都有哪些硬件設備,它們分別支持哪些特性;
因為不同的的Windows CE版本使用不同的CETK版本;另外不同的CPU類型使用不同的客戶端。特別是CETK是一個硬件特性的全集,其中的一些硬件特性也許現(xiàn)有的硬件平臺并不具備,因此必須了解清楚現(xiàn)有目標平臺的特性再進行測試,以免引起不必要的麻煩。在了解清楚以上幾點后,就可以進行CETK的測試了。
1、 準備測試環(huán)境:
既然CETK有服務器端和客戶端,那么它們之間至少應該通過某一種技術手段,使之連接起來。目前對于絕大多數(shù)嵌入式設備來說,都具有至少一個網(wǎng)絡設備。因此這里假設服務器端和客戶端是通過局域網(wǎng)進行連接的。在測試開始前,需要通過服務器端和客戶端的網(wǎng)絡設置程序,將它們設置在同一個網(wǎng)段之內,可以互相訪問。
2、 從開始菜單的Microsoft Windows CE組中啟動Windows CE .NET Test Kit。
3、 下載并運行客戶端軟件:
如果現(xiàn)有的硬件平臺中,并沒有包含CETK客戶端軟件clientside.exe,那么必須通過某種方式下載到硬件平臺上。該客戶端軟件在Windows CE 安裝目錄中。在了解目標機的CPU類型后,下載WINCEROOTOTHERSWCETKCPU typeclientside.exe到目標平臺上。由于假設服務器和目標平臺都在同一個局域網(wǎng)內,因此可以通過文件共享或者FTP等方式將其拷貝到目標機上。
下載完畢后,打開目標機的一個控制臺(SHELL),進入clientside.exe所在目錄,用命令行上輸入:clientside.exe /n=服務器IP地址 /p=5555。
4、 設置測試項目:
在客戶端運行了clientside后,過幾秒鐘后,在服務器的Windows CE .NET Test Kit中將顯示出目標設備的名字及可檢測單元。如下圖所示。
CETK通過連接到客戶端程序,自動獲取目標設備上的設備信息,并自動確定可以測試的項目。從上圖可以知道,該硬件設備不包含聲卡、紅外、鼠標設備等??梢詼y試的項目包括顯卡、調制解調器等。因為硬件設備種類繁多,因此該硬件掃描在具體細節(jié)上不見得準確。比如顯示卡如果不支持Direct3D功能,就不能進行該功能的測試。這也就是為什么用戶必須事先知道目標設備的具體硬件信息的原因。
每個單獨的設備都有一些可選的測試項,測試人員可以通過項目前的方框,選中或者取消一些項目的測試。
5、 設置測試命令行
如果要測試一個項目,先用鼠標選取該項目,然后點右鍵,將彈出一個菜單。在該項測試完畢前,菜單中的“View Results”選項是灰色的。選中“Edit Command Line”,將出現(xiàn)下圖所示對話框。
CETK從本質上講,其實就是一套完整的測試用例的集合,而每個測試用例都是一個應用程序。在測試過程中,所要測試的硬件特性,其實是對應于驅動程序中的某些函數(shù)調用。因此測試用例就是調用相關的驅動程序中的函數(shù),并通過檢測函數(shù)運行結果來判斷驅動程序是否正確的。MS提供了CETK工具的同時,也提供了這樣一套完備的測試用例。如果開發(fā)者使用了自己設計、或者是已有BSP中沒有的設備,在測試該設備的時候,就需要測試人員根據(jù)設備的特性及驅動程序,自行編寫測試用例。
下圖顯示的對話框是對網(wǎng)卡進行測試的命令行。
其中tux是一個32位的客戶/服務器程序,負責測試動態(tài)鏈接庫中的功能模塊。對于不同的動態(tài)鏈接庫及其中的模塊,當然要使用不同的命令行。因此測試者在進行工作前,必須要Windows CE .NET Test Kit的幫助文檔,了解不同模塊和不同功能所對應的命令行。
6、 開始測試:
如果僅僅對選中的一個項目進行測試,則選中菜單中的“Quick Start”即可。如果要對所有選定的項目進行測試,則要在Windows CE .NET Test Kit的菜單中選Tests->Start/Stop tests。
有些測試不需要人工干預,程序會自動完成。但是有些測試(比如鼠標、鍵盤等),在測試過程中包含人機交互的部分。因此測試人員在測試過程中,需要根據(jù)目標設備屏幕上的提示,進行相應的動作。
7、 查看測試報告:
在測試完畢后,菜單中的View Results將自動處于允許狀態(tài),選中得以查看該模塊的測試結果。
在CETKParser的顯示區(qū)域被分成三個窗口,最上面的窗口顯示了此模塊檢測的綜合參數(shù),中間窗口顯示的是用于此模塊測試的所有用例和最終結果。當選中其中一個用例時,在最下面的窗口中就會顯示此用例的測試詳細信息。上面論述過,測試用例其實就是調用驅動程序中的某些函數(shù),因此通過分析失敗的測試用例的代碼,就可以初步確定失敗在驅動的哪個函數(shù)中。將信息提供給開發(fā)者后,開發(fā)者再使用PB提供的調試工具,就能迅速定位和解決程序中的問題。
B、壓力測試
使用CETK還可以進行壓力測試。所謂的壓力測試就是讓目標平臺工作在極限狀態(tài)中的一種測試方法。通過壓力測試,能發(fā)現(xiàn)目標平臺一些單一測試不能發(fā)現(xiàn)的、隱藏很深的問題。在Windows CE .NET Test Kit的菜單中選other Test->Modular Stress Test,就可以進行壓力測試。
壓力測試的項目也是可選的。所進行壓力測試的項目定義在 Program FilesWindows CE Platform BuilderVERSIONcepbwcetkddtkarmv4oemstress.ini文件中。該文件的格式和內容一目了然,通過修改該文件,就能夠確定進行壓力測試的模塊和項目。
進行完壓力測試后,View Results顯示界面與其他結果不同,是一個表格,由于版面和篇幅的關系,這里不把該圖完全顯示出來,只顯示其中的一部分。在表格中,對開發(fā)者意義比較大的是“System Health”、“Modules Status”兩表,如下圖所示。從“System Health”中可以看到,在壓力測試前內存使用了20%,在測試后,內存使用情況為33%,這說明在壓力測試前后有內存的泄露。因此可以進一步判斷,內存的泄露在壓力測試中所使用的函數(shù)中。
而“Modules Status”中,是對各個模塊進行壓力測試的用例統(tǒng)計。
評論