Session 2: Testing Windows CE .NET 嵌入式软件开发导论 8. BSP开发 同济大学软件学院 2006 Alan Page, Microsoft
目录 板级支持包(BSP)的开发 标准CETK 测试的使用
板级支持包(BSP) 简介 BSP是在标准开发板上运行的一部分软件,主要功能是支持操作系统的引导与开发。通过BSP我们可以在开发板上快速的启动操作系统以及分析操作系统的性能。有了BSP的支持,各个OEM(原始设备制造商)厂商和独立硬件开发商就可以缩短基于Windows CE平台产品的开发周期。
CPU支持包(CSP) & OEM抽象层(OAL) OAL : OEM 抽象层 位于Windows CE 系统内核和目标板硬件之间,负责操作系统和目标板的通信。由引导程序调用,随后进行目标板的初始化工作,包括中断服务,实时时钟,内部计时器,调试部件,中断使能等等 由硬件 OEM厂商提供
CPU支持包(CSP) & OEM抽象层(OAL) CSP : CPU 支持包 包括用以支持特定CPU和相关芯片的OEM抽象层和设备驱动,这一部分是与特定开发板无关的。 通常由操作系统开发商提供,Win CE操作系统是由微软公司开发的。
板级支持包的组成 内容 描述 引导程序 加载操作系统映象 OEM 抽象层 (OAL) 连接内核映象,支持硬件的初始化和管理 设备驱动 支持相关外围设备以及动态安装的设备 配置文件 可以通过对环境变量、.bib文件和 and .reg文件的修改来重新配置BSP
BSP 架构 硬件抽象层 驱动 配置文件 引导程序 标准开发板 BSP
创建BSP的两种方法 编写全新的BSP 改写现有的BSP 需要编写所有的部分包括 OEM抽象层, 驱动, 引导程序 大约消耗 20人/月工作量 改写现有的BSP 对与目标板具有相似硬件组成的BSP的基础上进行某些改写,使其适用与目标板,这是最简单的方式。
BSP 向导 下面是创建基于Windows CE 的BSP的一般步骤,典型的情况下会产生一个 .cec w文件 Platform -> BSP Wizard
BSP开发流程
引导程序(可选) 如果操作系统映象可以直接引导,引导程序不是必须的 但通常使用一个引导程序,以便日后的扩充。另外也可以用于支持制造过程中的下载测试 引导程序的重要性在于可以支持开发过程中的运行时映象加载功能,也就是说在系统运行过程中,动态加载需要调试的模块
引导程序的功能 初始化目标设备 下载Windows CE 映象到RAM或flash: 内存和中断控制器 设置时钟和内存管理单元 直接引导现存的flash 或RAM 映象 下载之前清空RAM 内存读写测试 下载Windows CE 映象到RAM或flash: 并口 网卡
引导程序的加载
引导菜单
引导程序的开发 实现OEM的应用程序接口(API). 连接Microsoft提供的库
引导程序的任务 黑体字标识的函数需要由OEM厂商来实现.
控制流图 C:\WINCE420\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BLCOMMON
引导程序 – StartUp函数 硬件复位和运行时复位需要执行的第一条指令 设置为超级用户模式 执行必须的硬件初始化: CPU 内存控制器 系统时钟 串口 缓存 快表 (TLBs) 根据使用的CPU修改Startup.s
引导程序 -- EbootMain EbootMain是C代码运行的入口 调用BLCOMMON库 BLCOMMON 库 源文件在 Blcommon.c 文件中,路径为%_WINCEROOT%\Public\Common\Oak\Drivers\Ethdbg directory
引导程序 – OEMDebugInit 用来初始化串行口,作为调试输出 OEMDebugInit初始化完成后, 一个Windows CE的标记会出现,表示这个接口可以使用了.
引导程序 -- OEMPlatformInit 各种OEM 硬件平台初始化函数,包括时钟, PCI接口,或者NIC接口. NIC接口用于下载映象,另外服务于后面一些函数.
引导程序 -- OEMPreDownload 在加载一个运行时映象时首先被BLCOMMON调用. 查找硬件设备的IP地址,并与宿主机相连 如果出错返回-1
引导程序 -- OEMLaunch OEMLaunch 是引导程序的最后一个需要运行的函数. 负责跳转的到需要运行的映象. 跳转到由dwLaunchAddr指定的第一条指令,这条指令在运行时映象的启动函数里.
OAL开发 类似于引导程序的开发 可以重用引导部分的代码
OAL架构
内核开发 黑体显示的函数需要由OEM厂商来实现
内核工作流
KITL 这样的设计可以很容易加入任何调试服务功能 把通信协议和与之直接通信的硬件层分离开来 减少用户在创建硬件独立层的工作量
启动流程 CPU加电,跳转到复位向量 [可选] 引导程序从Startup()开始执行 执行OAL中的Startup() KernelStart() [ KernelInitialize() For x86 ] Kernel调用 OAL中的OEMInit() 完成内核初始化 内核加载Filesys.exe FileSys初始化注册表 内核加载在HKEY_LOCAL_MACHINE\Init 中列出的应用程序
驱动程序开发 参见前面的课程. 利用 BSP Wizard可以添加到BSP中
举例: 分析 Motorola DragonBall BSP
我们系统、完整地学习了 Windows CE 开发流程. 我们已经学习过什么? 我们系统、完整地学习了 Windows CE 开发流程.
从设备制造商得到硬件和 BSP 需要设计硬件? 设计实现你的硬件 为硬件设计BSP 需要定制平台? 从设备制造商处得到平台和 SDK 定制你的 Win CE 平台 导出你的 SDK 编码、测试 发布产品
综述 Windows CE 测试工具包 (CETK) Tux “server” Kato 日志引擎 常规 TUX 测试 设备驱动加载以及TUX扩展(DDLX) 常规 TUX 测试
Session 2: Testing Windows CE .NET CETK 结构 ClientSide.exe is used to communicate with the desktop CETK server. It launches TUX.EXE with the command line options specified from the desktop Server UI. It is possible to load TUX.EXE in a stand-alone fashion without the use of the remote server. Microsoft provides a number of TUX test DLLs for testing common drivers and aspects of the system. You can also create your own test DLLs for custom drivers. Alan Page, Microsoft
Windows CE 测试工具包 (CETK) Microsoft 提供了自动测试体系结构 Client/Server结构支持远端测试 通过 “Tux”加载自动测试 实际的测试是以DLLs的形式通过 TUX加载到系统中 通用日志引擎 “Kato” DLL exposes C and C++ API for logging to the server CETK Server 利用TUX启动特定的测试 保存日志以及产生报告 运行于桌面系统以便进行远程测试
TUX Server TUX.EXE 实际的测试是以 DLL的形式进行的 由远端用户界面应用程序发起运行 也可以在设备上独立运行 监控 TUX 测试 DLLs的程序 实际的测试是以 DLL的形式进行的 通过 TUX.EXE加载测试DLL 由远端用户界面应用程序发起运行 桌面系统上的CETEST.EXE 也可以在设备上独立运行
KATO 日志引擎 DLL :提供 API,以便将测试结果保存成日志 C++ 类库 C 函数 从TUX测试抽象出日志机制 本地文件 远端连接
设备驱动加载以及TUX扩展 (DDLX) 允许测试 DLL加载到设备管理进程空间 允许对APIs和功能的测试仅仅对设备管理模块可用 驱动可以直接为其他驱动提供服务
常规的TUX 测试 TUXSKEL IDE New Project Wizard 产生一个基于TUXSKEL 结构的常规TUX 测试