KITL流程之开发篇

我们需要为启用KITL功能做哪些事情
微软其实已经做了大部分的事情,开发者对KITL模块实际要做的并不多,尤其是当目标系统所采用的KITL连接设备是以太网口,或者串口这两种最常见的类型之一时。下面将以以太网端口做KITL链接设备的情况下系统软件开发者需要为KITL模块的初始化和运行所作的工作一一列举如下。
1.实现OEMKitlStartup函数
    这是第一个需要开发者实现的专为KITL模块服务的OEM函数。OEMKitlStartup函数被KITLIoctl函数调用,转而它又会调用OALKitlInit函数,前后都不是OEM函数。OEMKitlStartup函数的功能就是为调用OALKitlInit函数构造3个实际参数的数据,分别是代表KITL链接设备的标识符字符串、记录用户对系统KITL功能的配置的OAL_KITL_ARGS结构体数据、记录目标系统上的所有可选KITL连接设备的硬件位置及驱动程序的OAL_KITL_DEVICE结构体数组。理论上OEMKitlStartup函数可以以任何方式构造这3个实际参数数据,只要其内容与格式能够符合OALKitlInit函数的要求。
2.构造OAL_KITL_ARGS结构体数据
  OAL_KITL_ARGS结构体数据记录的是用户可配置的KITL参数,它由OEMKitlStartup函数构造供OALKitlInit函数使用。在DeviceEmulator中,这个OAL_KITL_ARGS结构体数据结构体数据是BootLoader启动参数BSP_ARGS结构体数据的组成部分,其OEMKitlStartup函数到BootLoader与操作系统共享数据的内存区域中获取这个OAL_KITL_ARGS结构体数据。虽然WINCE系统没有强制要求,但是用户可配置的KITL参数放置在BootLoader启动参数是有理由的,其最大的好处是可以通过BootLoader展示给使用者的选项菜单向用户提供设置和改变这些KITL参数的简单途径,而不必修改代码然后还要重新编译操作系统镜像。
3.构造OAL_KITL_DEVICE结构体数组
  由OEMKitlStartup函数构造填充供OALKitlInit函数使用的3个世纪参数数据中,前2个相对简单,第三个比较复杂。OALKitlInit函数的第三个参数是一个OAL_KITL_DEVICE结构体类型的指针,但是这个指针指向的是一个OAL_KITL_DEVICE结构体的数组而不是单一的结构体数据,这个数组记录着目标嵌入式系统上的所有可被选用作KITL连接设备的端口外设的硬件位置及驱动程序。
  OAL_KITL_DEVICE结构体的复杂性主要由它的最后一个成员造成的。OALKitlInit函数的第三个参数f_kitlDevices是一个OAL_KITL_DEVICE类型的全局数组。OAL_KITL_DEVICE是个头文件在D:\WINCE600\PLATFORM\COMMON\SRC\INC\oal_kitl.h中定义的结构体。OAL_KITL_DEVICE结构体的定义如下:
typedef struct {
    LPCWSTR name;           // Device/driver name
    UINT32 ifcType;         // Interface name
    UINT32 id;              // Device identification (depends on interface type)
    UINT32 resource;        // Resource to be used as base address
    OAL_KITL_TYPE type;     // KITL driver type (ethernet, serial, ...)
    VOID *pDriver;          // KITL driver (depends on driver type)
} OAL_KITL_DEVICE;
  前5个成员虽然简单,但是用户填充构造OAL_KITL_DEVICE数组时仍然要求准确,其数据能够正确无误地反应目标系统上可供选用的KITL连接设备的实际情况。
4.实现OEMKitlInit函数和构造KITLTRANSPORT结构体数据
  直接与开发者相关的以OEM开头的KITL功能函数只有OEMKitlStartup和OEMKitlInit两个。前面已经介绍了OEMKitlStartup函数,OEMKitlInit函数的功能则是填充构造一个KITLTRANSPORT结构体数据。如果用户的目标平台上所使用的KITL连接设备是以太网口或者串口这两种端口类型其中之一,则OEMKitlInit函数完全依靠调用OALKitlEthInit和OALKitlSerialInit两个函数来实现填充系统KITL模块所需的KITLTRANSPORT结构体数据。这两个OAL函数都是在oal_kitl.lib库函数中,他们的实现代码由微软提供,这就是说此时填充KITLTRANSPORT结构体数据的工作完全不需OEM用户开发者操心。但是用户又不得不考虑使用以太网口和串口两种类型以外的端口外设作为KITL连接设备的可能情况,因为KITL得设计本意就是不限制用作系统调试功能端口的类型,此时用户需要为OEMKitlInit函数提供新的实现代码以填充KITLTRANSPORT结构体数据。

你可能感兴趣的:(it)