WinCE 系统下BootLoader 的开发

作者: 白浪,张思东   发布日期:2006-10-21 16:51   查看数:0
中文摘要:

  介绍WinCE.NET 系统的定制方法;说明板级支持包(BSP ) 的基本构成;从开发实例出发, 详细阐述如何开发BSP 中的重要部件—BootLoader


引 言
     Windows CE.NET 是微软公司向嵌入式领域推出的 一款操作系统。它最大程度继承了桌面版Windows 操 作系统的丰富功能, 同时又融入了许多新特性, 以适应 嵌入式领域的实际情况和要求。无论是商业应用需求, 还是人们的多媒体消费需求, 都能被采用CE 操作系统 的设备很轻松的满足。最新的.NET 版本较之3 . 0 版本, 在实时性和稳定性上有大幅度提高, 开始广泛地被平 板电脑、数码相机、彩屏手机、PDA 等多种高性能产 品所采用。 但是,CE 并不是一个通用的安装版操作系统, 在形 形色色的嵌入式硬件设备世界里,一款CE 系统通常只 会针对某一种硬件平台生成。所以, 作为原始设备生产 商, 必须根据自己的硬件平台和应用场合定制CE , 最 主要的工作就是编写适合于自己的板级支持包(BSP )。 在BSP 中,包含了一个重要的组成部分—— BootLoader。 创建一款功能完善的BootLoader,是开发WinCE 系统的 第一步, 也是极为关键的一步。本文将结合开发实例, 介绍如何开发适合于自己硬件的BootLoader
2 BootLoader
     BootLoader 是一段单独的程序代码,它存放于目标 平台的非易失存储介质中,如ROM 或Flash。在开发CE 的过程中,它主要用于启动硬件和下载nk.bin 到目标板 上, 并有一定的监控作用。 图1 描述了WinCEBSP 基本结构以及BootLoader 所处的位置。 一般来说, 对于BootLoader 的功能要求并不是严格定义的, 不同 的场合区别很大。比如,在PC 的硬件平台上,由于硬件启动根本就不是 通过BootLoader (而是通过BIOS),所以BootLoader 就 不需要对CPU 加电后的初始化做任何工作;而在笔者的 开发平台(MIPS32)上,BootLoader 是最先被执行的程 序,所以就必须包括加电初始化程序。通常,BootLoader 必须包含下载CE 映像文件的功能。另外,管理和监控 硬件设备通常也是必须的, 因为这可以极大地方便工程 开发。由于BootLoader 涉及到基本的硬件操作,如CPU 的结构、指令等,同时又涉及到以太网下载协议(TFTP, 当然也可能通过串口) 和微软设定的映像文件格式。因 此从零实现的话,会需要相当长的过程。好在微软为每 种类型的CPU 都提供了某种标准开发板的BootLoader 例 程, 因此通常的做法是:从这些例程中寻找与硬件平台 最接近的作为标本程序,然后再从自己的硬件平台上入 手做相应的改动。一些新的评估板可能会由第三方的厂 商来提供Bootloader。如果硬件平台是从这样的基板设 计而来的话,那么最好去寻求这些厂商获取Bootloader 来移植, 以减小工作量。 笔者使用的硬件平台基于MIPS32 架构, 下载端口 采用的是以太网口, 同时还具备一个串口, 可以和主机 相连, 通过超级终端对该平台加以控制。该平台是参考 AMD 的一款标准评估板设计的,Bootloader以该板的BootLoader 为参考进行了移植。
3.4 支持DOC
     对于WinCE 操作系统而言,丰富的多媒体功能是其 一大特点,使其成为当前消费类电子产品操作系统中的 一个不错选择。但是随之而来的问题是,系统的容量已 经大大超出了传统嵌入式系统上百KB 的数量级。一般 来说, 如果选择了图形界面和汉语支持,容量一般会超 过16MB。DOC(Disk On Chip)则提供了一种相对廉价的 大存储容量的解决方案。 DOC 本质上是一种加以软件控制的NAND 格式的 Flash,通过TFFS 这一软件层提供对WinCE 的支持。 由于DOC不能像内存一样被直接访问, 所以其加载 WinCE 的过程有些特殊,必须要在BootLoader 中加入专 门的代码, 才能使用DOC来存放WinCE 映像文件。 为了说明怎样在Loader 文件中提供对DOC 的支持, 先看一下如何采用DOC系统启动CE , 如图4 所示。从 图4 可以看出,当采用DOC作为存储体的时候, 实际上 是在启动的时候把映像文件拷贝到内存中执行。为了实 现这一启动过程,就必然涉及到DOC的读写操作。首先 要从M-SYSTEM 的网站上获取DOC 的BOOT 软件开发包。 在这个开发包里, 提供了一系列DOC的操作函数。将此 开发包嵌入到CE 的BootLoader 中去,然后按照图4 的 步骤, 调用相应的读写函数完成这一过程。
结 语
     从CE 的BootLoader 开发流程可以看出,BootLoader 在完成下载CE 映像和加载映像的主要功能外, 还具有 一些调试硬件的功能。当然, 这些功能不是必需的,随 不同的用户可能有自己的定义。但是不管Loader 的功能 设计得多么简单或者是多么复杂,都是在开发CE 系统 中不可跳过的一环。实际上,由于Loader 有和CE 系统 交互数据的区域,所以还有对CE 启动过程的控制作用, 也是PB 控制目标板CE 启动的一个窗口。可以说, 一个 功能齐全的Loader ,不论是对调试硬件,还是控制和检 测CE 系统,甚至是成为产品之后的维护工作,都是大 有帮助的。 编写BootLoader 是开发WinCE 系统的第一步,也是关键的一步。 只有得到一个稳定工作的Loader 程序,才能够更进一步开发 WinCEBSP,直至最后整个系统的成功。 WinCE.NET,BSP,BootLoader,DOC