通过远程控制程序,开发人员可以从宿主机上远程地对目标机的运行状况进行监视和控制。宿主机和目标机之间一旦建立了远程控制连接,开发人员就可以进行下列操作:下载宿主机的文件到目标机、监视目标机处理器的状况和各个线程及进程、监视并且分析目标机内核或者应用程序的处理性能等。
在Platform Builder和Embedded Visual C++中都包含了下列远程工具:
n Remote Call Profiler
图8-1 选定远程工具
|
n Remote Heap Walker
n Remote Kernel Tracker
n Remote Performance Monitor
n Remote Process Viewer
n Remote Registry Editor
n Remote Spy
n Remote System Information
n Remote Zoom-in
这些功具可以通过Platform Builder或者EVC中的Tools下的菜单来选定,如图8-1所示。
每一个远程控制程序在系统中都只能运行一个实例。有一点要特别注意:Remote Call Profiler和Remote Kernel Tracker程序不能同时运行,由于它们都对系统内部调用进行了跟踪,因此如果同时使用会引起采样点缓冲区堆栈的冲突。其他的远程控制程序中可以运行多个窗口。
在Platform Builder 4.0版本之前,Windows CE是不支持Remote Call Profiler程序的,但是支持其他远程控制程序。在Platform Builder 4.0以后,平台对Remote Call Profiler提供了完美的支持。但是,通常对学习Windows CE的开发人员来说都使用Windows CE standard SDK,这个SDK对Remote Call Profiler的支持是很弱的。笔者使用Remote Call Profiler来连接Windows CE standard SDK的时候,经常发生目标机相关EXE文件(ConPmon.exe)未能正常启动的错误。在不断的尝试后发现这个问题的原因在于standard平台功能选择的时候没有加入profiling support选项,因此内核不支持性能评测程序。而大部分嵌入式软件开发人员一般只用EVC而不用Platform Builder,这样就无法在standard SDK上进行profile程序验证,如果使用的特定的SDK不支持profile的话,同样也无法进行性能调整。后面的小节中将通过实验来解释如何使Remote Call Profiler正常运行,并且获得开发人员所需要的、可理解的各种性能监测数据。
表8-1是Platform Builder和Microsoft Embedded Visual C++ 4.0提供的远程工具的各种功能。
表8-1 远程工具的各种功能描述
工 具 | 功 能 |
远程性能评测程序 | 提供了基于图形界面的目标机性能检测和分析功能。通过这个程序,开发人员不但能够获取目标机的运行数据,而且可以将这些数据以非常容易理解的图形化的方式显示出来,这些图形化方式包括了调用树结构、事件追踪显示,调用结点图显示。使用这个程序可以帮助开发人员寻找到系统或者应用程序的瓶颈所在。在linux中也有相关的性能测试程序,开源项目名称为Oprofile,有兴趣的读者可以参考一下 |
远程文件浏览程序 | 显示了目标机文件系统中的各种文件,开发人员还可以通过这个程序将宿主机的文件下载到目标机,其内部原理可以基本认为是像linux那样使用的FTP服务在宿主机和目标机之间进行文件传输 |
远程堆查看程序(Remote Heap Walker) | 显示了目标机上运行的各类进程的堆的使用情况 |
远程内核跟踪程序 | 显示了目标机内核追踪、执行顺序的信息 |
远程性能监视程序 | 对目标机总体性能进行评估 |
远程进程浏览程序 | 对目标机的进程运行状态信息进行监视 |
远程注册表编辑程序 | 显示了目标机的注册表信息,并且提供在宿主机上对其进行修改的功能 |
远程Spy程序(Remote Spy) | 显示了目标机上所打开的各个窗口的信息,以及它们所产生的各种事件 |
远程系统信息获取程序 | 显示了系统的各种设置和属性 |
远程桌面图像获取程序 | 从目标机桌面获取图像 |
8.1 模拟器
正如各自平台功能的不同,Platform Builder下的模拟器用来调试内核、驱动,EVC下的模拟器用来调试应用程序、DLL等。模拟器能够模拟Windows CE操作系统,使用宿主机的硬件环境。在硬件平台还没有成型的前提下,或者程序员开发与硬件无关的软件时,模拟器能起到很大作用。模拟器启动运行简单,不像实际的开发板的操作那样复杂,即使想重新启动模拟器多次,也不会花去很少时间。但是,模拟器运行在用户态下,它毕竟是一个应用程序,因此它的实时性是无法保证的,它只能一定程度上保证程序非实时性功能的正确性。
目前,模拟器只支持x86平台,它只适合调试基于“Emulator:x86”编译的内核。但是可以调试所有基于x86指令集编译的应用程序、动态链接库、静态链接库。“Emulator:x86”在EVC的“WCE Configuration”工具栏中间编译选项中可以找到。
关于模拟器的硬件限制:
n 仅能模拟DEC 2114x网卡驱动来提供网络支持,其他网卡驱动不支持;
n 仅能模拟FLAT显示驱动,其他显示驱动不支持;
n 不支持USB设备;
n 不支持PC卡、硬盘、CF卡;
n 不支持FAT、CDFS、DVD文件格式;
n 不支持IEEE1394设备。
如果模拟器配置使用了64MB字节的内存,建议用以下配置:
n 1GHz CPU;
n 384MB系统内存;
n 500MB可用硬盘空间。
8.1.1 模拟器的架构
从体系结构来看,模拟器是一个桌面环境中的窗口应用程序,它模拟了目标机的各种硬件接口和操作,例如:PCI总线、声卡、显卡等。
大多数操作系统只允许处理器上运行单独的操作系统,模拟器可以突破此限制,通过模拟硬件操作,直接访问宿主机内存和处理器来实现一个处理器上运行多个操作系统。除了Windows CE的模拟器以外,还有其他的很多模拟器例如著名的VMWare、Virtual PC等。和那些通用的模拟器不同,Windows CE的模拟器只能运行特定版本的Windows CE操作系统。
在开发中,程序员可以很方便地使用模拟器来调试内核和应用程序。但是,任何与时间限制有关的应用程序或者实时程序都不建议使用模拟器进行调试。在模拟器中,由于使用软件模拟了硬件的操作,因此其时序和实际的硬件不完全相同,通常模拟器下的程序运行速度只有同类主频处理器的80%。因此微软公司曾经提示,在模拟器上的程序性能与实际环境下的性能不完全相同。
在普通计算机的操作系统中,系统内核将防止系统级的处理程序在Ring 0或者Ring 1层执行,而把用户态的进程放置在Ring 3层运行。但是模拟器上的所有程序都是作为Ring 3层来运行的,即便模拟器中操作系统的系统级程序也一样,因为模拟器本身就是作为宿主机的一个应用程序来运行的。
目前,模拟器只支持x86芯片。
8.1.2 Platform Manager
在宿主机和目标机之间的连接中,需要使用到Platform Manager。下面通过实验来说明其用法。
实验一:配置Platform Manager
Platform Manager管理着宿主机和目标机的连接功能。在主界面中依次选择Target→Configure Remote Connection可以打开图8-2所示对话框:
图8-2 配置Platform Manager(1)
我们以模拟器为例,进行配置。
首先在图8-2所示的Download下拉框中选择Emulator-4.20,在Kernel下拉框中也同样选择。然后单击Download下拉框右侧的Configure按钮,将出现如图8-3所示的对话框。
在图8-3的示的ScreenSize中设置了模拟器的界面像素,对于Platform Builder这样比较消耗内存的程序来说,还是尽量将像素减小,同时用256色(选择8)。
在System选项组的Memory下拉选框中设置模拟器中预留给操作系统的内存,这部分内存只是模拟器从宿主机中分配的内存。一般配置成128MB足够了。
单击“OK”按钮在配置完连接后,在主界面中单击Target,可以看见Conncet命令可用了,这时才能连接宿主机和目标机,下载操作系统。如图8-4所示。
图8-3 配置Platform Manger(2) 图8-4 菜单配置Platform Manager后的Tanget
8.1.3 EVC++中的模拟器
实验二:在EVC++中创建可以使用模拟器调试的应用程序
(1)从主界面的“File”中选择“New Project”命令,进入如图8-5所示的界面。
图8-5 创建新工程(1)
(2)选择MFC项目WCE MFC AppWizard(exe),并且在CPUs中选择Win32 [WCE emulator],然后选择OK。进入如图8-6所示的界面。
(3)单击OK按钮后,根据向导提示继续完成配置,在图8-6所示界面中单击Finish将完成新工程的创建,此时将出现图8-7所示的开发。
图8-6 完成工程创建
图8-7 开发界面
(4)在开发界面中做如下选择:
n 工程选择helloworld
n SDK选择STANDARD SDK
n 版本选择Win32(WCE emulator)Debug
n 模拟器选择STANDARDSDK Emulator
如图8-7所示。
(5)最后先后按下编译快捷方式 和执行命令快捷方式 ,模拟器中将出现如图8-8所示的程序运行界面。
图8-8 编译与执行界面
8.1.4 Platform Builder中的模拟器
Platform Builder中的模拟器和EVC中的大体功能是一样的,但是Platform Builder可以把特定的功能编译到SDK中去,然后EVC再安装这个SDK后,才能使用新的功能。
总而言之,Platform Builder可以对模拟器中的操作系统的特性进行修改,而EVC只能接受对Platform Builder做的改动。
8.2 远程性能评测程序
8.2.1 Platform Builder中的性能评测程序
要使用Remote Call Profiler,必须在程序代码中嵌入profiling钩子,然后将代码的镜像文件下载到目标机中,再启动目标机,连接宿主机上的Platform Builder中的服务。
Remote Call Profiler不仅仅能监测应用程序,同样也可以监测操作系统内核的调用。如果程序使用Platform Builder或者是EVC编写的话,那么可以直接使用两个工具中的下载镜像文件的功能。如果是用其他工具编写的,那么需要把镜像文件复制出来,首先启动Platform Builder或者是EVC,然后启动模拟器服务,再打开远程文件监视程序,将镜像文件通过export file功能传输到目标机上,然后在目标机上启动(双击)该应用程序。这样才能得到监测的数据。
在启动被监测的程序之前,必须将Remote Call Profiler程序连接上目标机。
1.实验
实验三:创建和编译支持Profile功能的内核以及SDK
标准SDK是不支持Profile的,下面介绍如何使用自己的SDK来支持Porfile功能。
首先本章实验一介绍的方法定制一个平台请注意,本实验的目的仅仅是使用Profile功能,而Windows CE是嵌入式操作系统中最消耗内存的,因此为了防止模拟器内存资源的不足,在定制的过程中可以尽量删除不必要的功能。另外,建议读者在内存大于512MB的计算机上进行本实验。
创建完平台之后,先别急着编译,还有选项要设置,选择图8-2所示的Settings选项卡,进入如图8-9所示的对话框。
图8-9 设置选项(1)
选择Build Options对话框,在Enable Profiling前打勾,这表明Windows CE内核将支持监测功能。
最好再记下这个平台的release目录,如图8-10所示,因为release目录下的文件将被复制到模拟器的/release目录下,因此有任何需要在启动时候下载的文件都可以放在这里。
在笔者的计算机上,这个release目录为G:\WINCE420\PUBLIC\Kaola\RelDir\EMULAT~1,EMULAT~1表示EMULATOR_X86Release,类似DOS对操作系统Windows操作系统的长短文件名支持那样。
图8-10 设置选项(2)
单击“OK”按钮后,系统将记录下编译的配置。
然后在主界面依此单击Build->Build Platform菜单,系统就进入平台编译了。
图8-11 选择一个设备
|
实验完毕。
实验四:在Platform Builder下使用Profile功能
在实验三的基础上进行如下操作。
启动模拟器。首先连接Remote Call Profiler工具和模拟器,后下载包含指定的包含Profile调试代码的样例程序到模拟器中。
连接Remote Call Profiler和模拟器。依此单击Tools-> Remote Call Profiler,将弹出图8-11所示的对话框,选择Windows CE.NET Default Platform下的Default Device。
然后选择“OK”。将进入如图8-12所示的界面。
连接完成后,将弹出Collection Control的对话框,如图8-13所示。
Collection Control窗口是在设置连接设备之后弹出的窗口。只能获取嵌入有Profiling钩子的代码的监测信息。
只要在代码中嵌入