當前位置:編程學習大全網 - 編程語言 - 如何在 Windows CE 5.0 中開發和測試設備驅動程序

如何在 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 module

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 窗口。

鍵入 dumpbin 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 | Modules 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 Module (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。

  • 上一篇:我要配置壹臺價格在六千元以內的臺式電腦,要求能流暢運行三D繪畫制作軟件(不是玩遊戲)
  • 下一篇:分享面試技巧七個絕招
  • copyright 2024編程學習大全網