分类:
2009-12-21 21:24:52
第四部分:使用 Windows CE Test Kit
Windows CE Test Kit 包含设备端组件和桌面组件。设备端组件叫做 Clientside.exe,通过从目录中添加 CETK 组件,您可以将设备端组件添加到您的工作区中。注意,将 Clientside.exe 应用程序添加到工作区中并没有将任何文件添加到最终操作系统映像中,但它却将应用程序复制到 build release 文件夹中。
在桌面计算机上运行 CETK 之前,您需要启动设备上的 Clientside.exe 应用程序。没有链接工具(比如远程工具)的原因在于,CETK 也将运行在装配(零售)设备(比如 Pocket PC)上。
在这一部分的练习中,您将执行以下过程:
1. 检验 Windows CE Test Kit 用户接口
2. 运行一个标准测试
检验 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 中之前,您可以运行一个标准测试,以查看测试工作如何进行。
运行标准测试
1. 在 CETK 中,展开 Windows CE (x86)。
2. 找到并展开 Serial Port。
3. 右键单击 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 中的自定义流驱动程序测试
1. 在 CETK 中,单击 Tests | User Defined。
这一步启动 User-Defined Test Wizard。该向导的第一页只是一些信息。
2. 单击 Next,如下图所示。
3. 单击 Add a New Test,然后单击 Next,如下图所示。
4. 输入下列信息,然后单击 Next:
a. 在 Name of Test 框中键入 Custom Stream Driver Test
b. 在 Tux Module (DLL) 框中,定位到 C:\Wince500\PBWorkspaces\MyPlatform\RelDir\Emulator_x86_Debug 目录,然后选择 test.dll 或 TuxTest.dll(这依赖于您在 Platform Builder 中所使用的 Tux 测试的名称)。
c. 在 Command Line 框中,保留当前测试的默认设置。
d. 在 Processor 框中键入 x86
下图显示信息如何出现在当前的向导页中。
5. 单击 Copy the files to the directory for user-defined tests,然后单击 Next,如下图所示。
您需要将自定义驱动程序测试(您的 DLL)复制到用户定义的测试文件夹中。如果您要删除现有的工作区,那么自定义驱动程序测试仍然保持完好。
1. 单击 Next,如下图所示。
2. 单击 Finish,如下图所示。
CETK 应用程序不会用新的测试进行自动刷新。您需要重新同步桌面应用程序,以查看新添加的测试。
3. 右键单击 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.
运行自定义流驱动程序测试
1. 在可用的测试列表中展开 User Tests。
2. 右键单击 Custom Stream Driver Test,然后单击 Quick Start。
注意 Platform Builder 中显示的下列调试信息。
1162630 PID:3c92032 TID:3efe3ea *** TEST STARTING
1162630 PID:3c92032 TID:3efe3ea ***
1162630 PID:3c92032 TID:3efe3ea *** Test Name: Sample test
1162630 PID:3c92032 TID:3efe3ea *** Test ID: 1
1162640 PID:3c92032 TID:3efe3ea *** Library Path: \test.dll
1162650 PID:3c92032 TID:3efe3ea *** Command Line:
1162650 PID:3c92032 TID:3efe3ea *** Random Seed: 26648
1162650 PID:3c92032 TID:3efe3ea *** Thread Count: 0
1162650 PID:3c92032 TID:3efe3ea *** vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
1162660 PID:3c92032 TID:3efe3ea test: ShellProc(SPM_BEGIN_TEST, ...) called
1162660 PID:3c92032 TID:3efe3ea BEGIN TEST: "Sample test", Threads=0, Seed=26648
1162690 PID:3c92032 TID:3efe3ea Custom Stream Driver Test Starting
1162690 PID:3c92032 TID:3efe3ea Custom Driver Test - Loading Demo.DLL
1162710 PID:3c92032 TID:3efe3ea 0x83d3dc28: >>> Loading module streamdrv.dll at address 0x01ED0000-0x01ED5000
1162720 PID:3c92032 TID:3efe3ea StreamDrv - DLL_PROCESS_ATTACH
1162720 PID:3c92032 TID:3efe3ea Custom Driver Test - Loaded Demo.DLL OK
1162740 PID:3c92032 TID:3efe3ea Custom Driver Test - Checking Interfaces...
1162740 PID:3c92032 TID:3efe3ea Custom Driver Test - Checking DEM_Open
1162740 PID:3c92032 TID:3efe3ea Custom Driver Test - DEM_Open OK
1162740 PID:3c92032 TID:3efe3ea Custom Driver Test - Checking DEM_Close
1162750 PID:3c92032 TID:3efe3ea Custom Driver Test - DEM_Close OK
1162750 PID:3c92032 TID:3efe3ea Custom Driver Test - Checking DEM_Read
1162750 PID:3c92032 TID:3efe3ea Custom Driver Test - DEM_Read OK
1162770 PID:3c92032 TID:3efe3ea Custom Driver Test - Checking DEM_Write
1162790 PID:3c92032 TID:3efe3ea Custom Driver Test - DEM_Write OK
1162790 PID:3c92032 TID:3efe3ea Custom Driver Test - Checking DEM_Init
1162790 PID:3c92032 TID:3efe3ea Custom Driver Test - DEM_Init OK
1162790 PID:3c92032 TID:3efe3ea Custom Driver Test - Checking DEM_Deinit
1162800 PID:3c92032 TID:3efe3ea Custom Driver Test - DEM_Deinit OK
1162800 PID:3c92032 TID:3efe3ea Custom Driver Test - Checking DEM_PowerUp
1162800 PID:3c92032 TID:3efe3ea Custom Driver Test - DEM_PowerUp OK
1162800 PID:3c92032 TID:3efe3ea Custom Driver Test - Checking DEM_PowerDown
1162810 PID:3c92032 TID:3efe3ea Custom Driver Test - DEM_PowerDown OK
1162810 PID:3c92032 TID:3efe3ea Custom Driver Test - Checking DEM_IOControl
1162810 PID:3c92032 TID:3efe3ea Custom Driver Test - DEM_IOControl OK
1162810 PID:3c92032 TID:3efe3ea Custom Driver Test - Checking DEM_Seek
1162820 PID:3c92032 TID:3efe3ea Custom Driver Test - DEM_Seek OK
1162830 PID:3c92032 TID:3efe3ea StreamDrv - DLL_PROCESS_DETACH
1162840 PID:3c92032 TID:3efe3ea 0x83d3dc28: <<< Unloading module streamdrv.dll at address 0x01ED0000-0x01ED5000
1162870 PID:3c92032 TID:3efe3ea test: ShellProc(SPM_END_TEST, ...) called
1162870 PID:3c92032 TID:3efe3ea END TEST: "Sample test", PASSED, Time=0.180
1162870 PID:3c92032 TID:3efe3ea *** ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1162870 PID:3c92032 TID:3efe3ea *** TEST COMPLETED
1162880 PID:3c92032 TID:3efe3ea ***
1162880 PID:3c92032 TID:3efe3ea *** Test Name: Sample test
1162880 PID:3c92032 TID:3efe3ea *** Test ID: 1
1162890 PID:3c92032 TID:3efe3ea *** Library Path: \test.dll
1162890 PID:3c92032 TID:3efe3ea *** Command Line:
1162890 PID:3c92032 TID:3efe3ea *** Result: Passed
1162900 PID:3c92032 TID:3efe3ea *** Random Seed: 26648
1162910 PID:3c92032 TID:3efe3ea *** Thread Count: 1
1162910 PID:3c92032 TID:3efe3ea *** Execution Time: 0:00:00.180
测试完成,没有任何警告或错误。您也可以在客户端检验测试结果。
第六部分:确定谁拥有流驱动程序
到目前为止,您已经通过 Platform Builder 调试信息、驱动程序源代码中的断点以及自定义 CETK 测试看到了自定义流驱动程序加载。
在这一部分的练习中,您将执行以下过程:
· 使用远程进程查看器 (Remote Process Viewer) 确定哪个进程正在加载驱动程序
· 显示信息
使用远程进程查看器确定哪个进程正在加载驱动程序
1. 在 Platform Builder 中,单击 Tool | Remote Process Viewer。
除了加载到每个进程地址空间中的 DLL 或模块,进程查看器应用程序会显示当前正在运行的进程列表。
2. 找到并选择 device.exe。
下图显示加载到 Device.exe 进程地址空间中的 DLL 列表。Device.exe 是 Windows CE 的设备驱动程序管理器。
显示信息
· 通过使用 Platform Builder,编写一个 Microsoft Win32 应用程序来将数据写入自定义流驱动程序中,并读回和显示该信息。您可以使用 MessageBox API 来完成。
您需要用于该任务的 API 是:
· CreateFile
· WriteFile
· ReadFile
· CloseHandle
· MessageBox
小结
· 驱动程序只不过是一些 DLL。
· 驱动程序被映射到 Device.exe 进程地址空间中。
· 驱动程序公开了一个众所周知的接口集。
· 将设备驱动程序添加到 Windows CE 操作系统映像中相对容易的多。
· 可以使用 Windows CE Test Kit 来协助进行平台开发和调试。
· 编写自定义 CETK 测试相当容易。