⑴ 如何在 Windows CE 5.0 中開發和測試設備驅動程序
本文介紹如何開發和測試 Windows CE 5.0 設備驅動程序。本文循序漸進地介紹如何創建流驅動程序,如何創建自定義 Windows CE Test Kit
(CETK) 測試,以及如何編寫應用程序來測試驅動程序。這要花費大約 60 分鍾來完成。
本頁內容
第一部分:建立設備驅動程序
第二部分:測試流驅動程序測試代碼
第三部分:檢驗驅動程序
第四部分:使用
Windows CE Test Kit
第五部分:創建自定義
CETK 測試
第六部分:確定誰擁有流驅動程序
小結
第一部分:建立設備驅動程序
在本練習中,您將使用 Platform Builder 來添加作為設備驅動程序的項目。
在 開始編寫驅動程序之前,您應該了解設備驅動程序的用途。驅動程序將基礎硬體從梁頃操作系統中抽象出來,使之更好地面對應用程序開發人員。應用程序開發人員無需
知道顯示硬體或串列硬體的詳細信息 — 例如,串列設備是用 Universal Asynchronous Receiver/Transmitter (UART)
實現的還是用 field-programmable gate array (FPGA)
實現的。在大多數情況下,應用程序開發人員根本不需要知道硬體是如何實現的。
Microsoft Windows 為開發人員公開了調用硬體的應用程序編程介面
(API),他們不需要知道物理硬體的情況。例如,為了向串列埠寫入數據,應用程序開發人員只需調用 COMx 上的 CreateFile( )(其中 x
表示您要打開的串列埠編號,例如 COM1 代表串列埠 1),再調用 WriteFile( ) 以將一些位元組數據寫入串列埠,然後調用
CloseHandle( ) 以關閉串列埠。不管基礎串列硬體是什麼(也不管您運行的是哪個 Windows 操作系統),API 都會以同樣的順序執行。
相同的情況也適用於其他 API:如果您希望在顯示表面畫一條線,那麼您只需調用 PolyLine( )、MoveToEx( ) 或 LineTo(
)。作為應用程序開發人員,大多數情況下您都不需要知道顯示硬體的情況。此處調用的 API 將返回顯示表面的維數、顏色深度等碼銷等。
好 消息是開發人員可以調用一個一致的、眾所周知的 API 集。這些 API
將他們的應用程序從基礎硬體中抽象出來。這至關重要,因為應用程序開發人員無法知道應用程序是運行在攜帶型計算機上,還是運行在 Tablet PC
上,抑或運行在桌面計算機上。無論電腦以 1024×768 還是 1600×1200
的解析度運行,應用程序開發人員都可以在運行時查詢屏幕解析度和顏色深度,因此不需要構建只在特定硬體上運行的應用程序。
驅動程序只是一 個動態鏈接庫(DLL)。將 DLL 載入到父進程地址空間;然後父進程就可以調用從該 DLL 公開的任何介面。通常,父進程通過調用
LoadLibrary( ) 或 LoadDriver( ) 來載入驅動程序。LoadDriver 不僅將 DLL 載入到父進程地址空間中,而且還要確保 DLL
沒有「paged out」。
調用進程如何知道從您的 DLL 或驅動程序公開了哪些 API 或函數呢?父進程調用 GetProcAddress( ),後者可以獲取函數名稱和所載入的
DLL 的 hInstance。如果函數存在,調用返回該函數指針;如果沒有從 DLL 公開該函數,則返回 NULL。
流驅動程序也公開了一個眾所周知的函數集。對於流驅動程序,您會希望能夠將位元組流寫入設備中,或者從設備中讀取位元組流。因此,在前面使用的串列埠示例中,您可能希望從您的驅動程序公開如下函數集:Open、Close、Read
和
Write。流驅動程序還公開一些其他函數:PowerUp、PowerDown、IOControl、Init
和 DeInit。
您可以將現有的操作系統映像用於模擬器平台(Basic Lab MyPlatform 平台最理想)。然後,您就可以將
DLL/驅動程序項目添加到該平台了。
橡模陸在構建並下載了該平台之後(這表明操作系統啟動並運行良好),您需要創建您的主幹驅動程序。您可以使用 File 菜單上的 Platform
Builder New Project or File 命令創建一個 Microsoft Windows CE DLL。創建用於公開函數或資源的
DLL 與創建用作驅動程序的 DLL 之間沒有什麼不同;唯一的不同之處在於 DLL 公開哪些函數,以及如何在平台上注冊或使用 DLL。
此 外,一種創建國際化應用程序的方法是,首先創建包含一組核心語言字元串、對話框和資源的基本應用程序,然後創建許多外部
DLL,其中每個都包含針對特定區域設置的對話框、字元串和資源。然後,應用程序就可以在運行時載入相應的語言資源。只需要添加 DLL
文件,您就可以將語言添加到應用程序中。在 Developing International
Software 一書中描述了與此相關的主題以及其他一些有趣的主題,可以在 Microsoft Press 網站上獲得此書。
添加一個作為設備驅動程序的項目
用 Platform Builder 打開現有的 MyPlatform 工作區。
在 File 菜單上,單擊 New Project or File。
選擇 WCE Dynamic-Link Library,給它一個合適的名稱(例如,StreamDrv),然後單擊
OK,如下圖所示。
在下圖所顯示的頁面中多少填寫一些您需要的信息,然後單擊 Next。
單擊 A simple Windows CE DLL project,如下圖所示。
單擊 Finish 完成此向導。
此時,DLL 只包含一個空的 DllMain
函數。您可以公開一些應用程序要調用的函數,並公開一些資源(可能使之成為識別語言/文化的應用程序的一部分),或者使之成為一個設備驅動程序。在本文中,您將使用
Windows CE Stream Driver Wizard 創建您的主幹流驅動程序。
在 Windows CE 中,打開流驅動程序就像打開文件一樣,只需根據唯一的三字母前綴(例如,COM)。
為您的驅動程序選擇一個唯一的三字母標識符。在 Location
框中輸入您之前創建的流驅動程序的完整路徑。或者使用「browse」按鈕定位到 Platform Builder 安裝中的 PBWorkspaces
目錄,找到您前面創建的平台,然後找到流驅動程序的名稱(在前面的示例中,此路徑為 PBWorkspaces\TuxPlat\StreamDrv)。
在 Driver Filename 框中輸入驅動程序的名稱。如下圖所示,使用與您前面使用名稱 (StreamDrv)
相同的名稱,以確保改寫在 Platform Builder 中創建的原始文件。
按 Go,將生成流驅動程序源代碼。
返回頁首
第二部分:測試流驅動程序測試代碼
現在您已經編寫了用於 Windows CE 的自定義流驅動程序的基本代碼。此時,驅動程序還沒有與任何硬體連接。
在 編寫完驅動程序之後,您需要為開發人員提供一種測試它的方法。Windows CE 附帶了 Windows CE Test Kit
(CETK),它提供了用於各種驅動程序類型的驅動程序測試,包含網路連接、藍牙、串列埠以及顯示。您編寫的驅動程序是一種自定義的流驅動程序,它沒有
公開與現有的驅動程序測試一樣的功能,因此您需要為該驅動程序編寫一個自定義測試。雖然您完全可以編寫一個應用程序來演練驅動程序,但提供一個 CETK
模塊或許更好些,在開發期間可以使用此模塊,並且還可以將此模塊提供給客戶,供他們在裝配硬體上測試驅動程序。
在這一部分的練習中,您將執行以下過程:
創建主幹 Tux 模塊
將自定義驅動程序的測試代碼添加到 Tux DLL 中
重新構建操作系統
設置斷點
創建主幹 Tux 模塊
在 Platform Builder 中,在 File 菜單上單擊 New Project or File。
選擇 WCE TUX Dynamic-Link Library,鍵入 TuxTest 作為項目名稱,輸入一個位置,單擊
Workspace Project,然後單擊 OK,如下圖所示。(實際上,您可以選擇任意一個項目類型;對於本文,單擊
Workspace Project)。
在下圖顯示的頁面中多少填寫一些您需要的信息,然後單擊 Next。
閱讀下圖所顯示的屏幕上的信息,然後單擊 Next。
在最後一頁上,您可以選擇選取 Release Type 下的
CETK,如下圖所示。該選項關閉了某些二進制的優化,以提高調試工作效率。單擊 Finish。
單擊 View | File View,然後展開 Projects 樹顯示 tux
源代碼,如下圖所示。
前圖中需要注意的重要文件是:
ft.h — 該文件包含 tux DLL 所用的函數表。
test.cpp — 該文件包含從該函數表中調用的測試過程。
TuxStreamTest.cpp — 該文件包含 DLLMain 和 ShellProc,後者是從 Tux.exe
調用的。
將自定義驅動程序測試代碼添加到 Tux DLL 中
打開源代碼 Test.cpp。
使用 CodeClip 來獲得 Tux_Custom_Test | TuxCode 源代碼。
用 CodeClip 中的代碼替代函數 TestProc 中的內容。
您會注意到,Test.cpp 中的代碼載入了一個名為 Demo.dll 的驅動程序。對於本文,您創建了一個名為 StreamDrv
的驅動程序。您需要修改源代碼以載入您的 StreamDrv.dll 驅動程序。
找到 Test.cpp 中調用 LoadLibrary 的源代碼的位置,然後將要從 Demo.dll
中載入的驅動程序的名稱修改為 StreamDrv.dll。
在 Platform Builder 文件視圖中,右鍵單擊 TuxTest 項目,然後單擊 Build Current
Project。
您還需要從該目錄中添加 Windows CE Test Kit 組件。
在 Device Drivers 下,找到該目錄中 Windows CE Test Kit 組件的位置,然後選擇
Add the Windows CE Test Kit,將該組件添加到您的平台中。
注 將該組件添加到您的平台上並沒有將任何文件添加到最後的操作系統映像中;它將 Clientside 文件添加到 build release
文件夾中。您可以從 Platform Builder 下載 Clientside 應用程序,並在目標設備上運行該應用程序。
現在您需要重新構建您的操作系統,以便合並這些變更。
重新構建操作系統
在 Platform Builder 中,選擇 Build OS | Sysgen。
構建過程將會花大約 5 分鍾完成。
當載入驅動程序時,在流驅動程序的入口點設置一個斷點來觀察非常有用。
設置斷點
單擊 File View,打開 StreamDrv 項目,然後打開 Source files。
找到並打開 StreamDrv.cpp。
找到 DllMain,然後找到並單擊 switch 語句。
按 F9 設置斷點。
單擊 Target | Attach,將操作系統下載到模擬環境中。
您會看到以下調試輸出,斷點將啟用。注意,在載入操作系統的用戶介面 (UI) 之前,這早就發生了。
4294780036 PID:23f767b6 TID:23f767e6 0x83fa6800: >>> Loading mole
streamdrv.dll at address 0x01ED0000-0x01ED5000
Loaded symbols for
'C:\WINCE500\PBWORKSPACES\DRVDEMO\RELDIR\EMULATOR_X86_DEBUG\STREAMDRV.DLL'
單擊 switch 語句,然後按 F9 禁用斷點。
按 F5,允許操作系統繼續載入。
現在,您已經構建了一個 Windows CE 5.0
操作系統,它包含一個自定義流驅動程序,並且您已經在操作系統引導順序的過程中看到了驅動程序載入。
返回頁首
第三部分:檢驗驅動程序
在這一部分的練習中,您將執行以下過程:
使用命令行工具查看從驅動程序公開的函數
使用遠程系統信息 (Remote System Information) 工具檢驗驅動程序
確定驅動程序已載入
檢驗您所創建的設備驅動程序的第一種方法是查看從該驅動程序公開的函數。Windows CE 附帶了一個名為 Dumpbin
的命令行工具,可以用於檢驗導入應用程序或模塊的內容,或者從 DLL(或驅動程序)導出的內容。
使用命令行工具查看從驅動程序公開的函數
在 Platform Builder 中,單擊 Build OS | Open Release
Directory。該操作為當前的工作區打開 build release 文件夾中的 Command Prompt 窗口。
鍵入 mpbin exports StreamDrv.dll
下圖顯示輸出。您可以看到,所有需要的流驅動程序函數都是從驅動程序公開的;函數是從 DLL 公開的(通過該項目的 .def 文件)。
鍵入 Exit 關閉 Command Prompt 窗口
StreamDrv.def 文件的內容如下所示。
LIBRARY DemoDriver
EXPORTS
DEM_Init
DEM_Deinit
DEM_Open
DEM_Close
DEM_IOControl
DEM_PowerUp
DEM_PowerDown
DEM_Read
DEM_Write
DEM_Seek
CustomFunction
CustomFunctionEx
您可以檢驗驅動程序的第二種方法是通過遠程系統信息工具。
通過遠程系統信息工具檢驗驅動程序
在 Platform Builder 中,單擊 Tools | Remote System
Information。
選擇 Windows CE Default Platform | Default Device,然後單擊
OK,如下圖所示。
此過程將遠程系統信息應用程序連接到 Platform Builder 正在使用的當前活動平台上。下圖顯示了結果。
您也可以使用載入模塊列表來確定已載入了您的驅動程序。
確定驅動程序已載入
在 Platform Builder 中,使用 Target Control 窗口 (gi mod) 或 View |
Debug Windows | Moles and Symbols。
下圖顯示了此過程的結果。
返回頁首
第四部分:使用 Windows CE Test Kit
Windows CE Test Kit 包含設備端組件和桌面組件。設備端組件叫做 Clientside.exe,通過從目錄中添加 CETK
組件,您可以將設備端組件添加到您的工作區中。注意,將 Clientside.exe
應用程序添加到工作區中並沒有將任何文件添加到最終操作系統映像中,但它卻將應用程序復制到 build release 文件夾中。
在桌面計算機上運行 CETK 之前,您需要啟動設備上的 Clientside.exe 應用程序。沒有鏈接工具(比如遠程工具)的原因在於,CETK
也將運行在裝配(零售)設備(比如 Pocket PC)上。
在這一部分的練習中,您將執行以下過程:
檢驗 Windows CE Test Kit 用戶介面
運行一個標准測試
檢驗 Windows CE Test Kit 用戶介面
在 Platform Builder 中,在 Tools 菜單上單擊 Windows CE Test
Kit。
這 一步啟動 Windows CE Test Kit 應用程序,如下圖所示。注意,這不是一個標準的遠程工具。Windows CE
附帶的大多數遠程工具都使用 Kernel Independent Transport Layer
(KITL),一種將工具從基礎通信硬體中抽象出來的傳輸,以便這些工具可以運行在乙太網、串列埠、1394、USB 或者其他傳輸上。
雖然對於 Windows CE 5.0,Windows CE Test Kit 通常通過套接字連接,但是也已經更新了工具來支持 KITL。
在 Windows CE Test Kit 中,單擊 Connection | Start
Client。
這一步顯示 Device Connection 對話框,其中您可以選擇是通過套接字連接還是通過 KITL 連接。
確保清除了 Use Windows Sockets for the client/server communication
復選框,如下圖所示。
單擊 Connect。
在遠程工具 (KITL) 的標准用戶界面中,選擇 Windows CE Default Platform | Default
Device,然後單擊 OK,如下圖所示。
該過程在目標設備上啟動 Clientside.exe,並連接到目標設備上。在完成連接之後,CETK 枚舉目標平台上支持的設備,並禁用 CETK
中不支持的設備。
在 CETK 連接到目標設備並枚舉設備之後,UI 如下圖所示。注意,禁用了某些硬體類別,比如 Bluetooth、IR
Port 和 Modem。
將自定義測試添加到 CETK 中之前,您可以運行一個標准測試,以查看測試工作如何進行。
運行標准測試
在 CETK 中,展開 Windows CE (x86)。
找到並展開 Serial Port。
右鍵單擊 Serial Port Driver Test,然後單擊 Quick Start。
這一步只運行了這一個測試,還沒有運行所選的其他測試。UI 指示測試正在進行,如下圖所示。
CETK 提供測試過程和測試輸出的更新。您也可以在 Platform Builder 中檢驗調試輸出,以便查看測試過程,如下例所示。
405910 PID:83d4ee4a TID:83ea5a8a *** Test Name: Set event mask and wait for
thread to close comm port handle
405920 PID:83d4ee4a TID:83ea5a8a *** Test ID: 1007
405920 PID:83d4ee4a TID:83ea5a8a *** Library Path: \serdrvbvt.dll
405920 PID:83d4ee4a TID:83ea5a8a *** Command Line:
405920 PID:83d4ee4a TID:83ea5a8a *** Result: Passed
405920 PID:83d4ee4a TID:83ea5a8a *** Random Seed: 15595
405930 PID:83d4ee4a TID:83ea5a8a *** Thread Count: 1
405930 PID:83d4ee4a TID:83ea5a8a *** Execution Time: 0:00:05.110
405930 PID:83d4ee4a TID:83ea5a8a ***
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
如果 CETK UI
指示模擬器上的串列埠測試已經失敗(如下圖所示),那麼失敗可能不是由於每個測試的完全失敗而導致的。它可能表明,全部測試套件只有一部分已經失敗,並且這部分實際上也是期望的行為。
右鍵單擊 Serial Port Driver Test [Failed],然後單擊 View
Results。
出現如下圖所示的窗口。
查看上圖所示的結果,您可以看到,已經運行了 10 個單獨的測試。除了 Set and verify receive timeout
以外,所有這些測試都已經通過。
要獲得更多信息,您可以單擊個別測試。
返回頁首
第五部分:創建自定義 CETK 測試
通過使用 Platform Builder User-Defined Test Wizard,您可以創建一個自定義 CETK
測試。該測試將驗證自定義流驅動程序(您也已經將其添加到平台中)的導出函數。
在這一部分的練習中,您將執行以下過程:
列出 CETK 中的自定義流驅動程序測試
運行自定義流驅動程序測試
列出 CETK 中的自定義流驅動程序測試
在 CETK 中,單擊 Tests | User Defined。
這一步啟動 User-Defined Test Wizard。該向導的第一頁只是一些信息。
單擊 Next,如下圖所示。
單擊 Add a New Test,然後單擊 Next,如下圖所示。
輸入下列信息,然後單擊 Next:
· 在 Name of Test 框中鍵入 Custom Stream Driver Test
· 在 Tux Mole (DLL) 框中,定位到
C:\Wince500\PBWorkspaces\MyPlatform\RelDir\Emulator_x86_Debug 目錄,然後選擇
test.dll 或 TuxTest.dll(這依賴於您在 Platform Builder 中所使用的 Tux
測試的名稱)。
· 在 Command Line 框中,保留當前測試的默認設置。
· 在 Processor 框中鍵入 x86
下圖顯示信息如何出現在當前的向導頁中。
單擊 Copy the files to the directory for user-defined tests,然後單擊
Next,如下圖所示。
您需要將自定義驅動程序測試(您的 DLL)復制到用戶定義的測試文件夾中。如果您要刪除現有的工作區,那麼自定義驅動程序測試仍然保持完好。
單擊 Next,如下圖所示。
單擊 Finish,如下圖所示。
CETK 應用程序不會用新的測試進行自動刷新。您需要重新同步桌面應用程序,以查看新添加的測試。
右鍵單擊 Windows CE (x86),然後單擊 Redetect Peripherals。
該過程添加了一個名為 User Tests 的新驅動程序類別。您只添加了一個測試,因此,當您展開這個項目時,您只能看到 Custom
Stream Driver Test。
注 已經將自定義流驅動程序測試的 DLL 復制到下列位置: C:\Program Files\Windows CE Platform
Builder\5.00\CEPB\wcetk\user\x86.
運行自定義流驅動程序測試
在可用的測試列表中展開 User Tests。
右鍵單擊 Custom Stream Driver Test,然後單擊 Quick Start。
⑵ wince如何升級
WindowsCE是微軟公來司嵌入式、移動計算平台的基自礎,它是一個開放的、可升級的32位嵌入式操作系統,詳細步驟:
1、進入CE桌面,先下載CE桌面程序explorer.exe,然後拷貝到U盤或儲存卡上。