用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

WinCE系统下BootLoader的开发

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:52:39
是笔者Loader所提供的命令。

表1 

命   令

说      明

Help列出所有支持的命令并加以说明
Eboot从开发台下载CE映像并加载
Write向某一内存地址写入数据
Read显示某一内存地址的数据
Jump跳转到某一地址执行程序
Xmodem从计算机的超级终端接收以Xmodem协议传送的文件
Toy测试平台CPU的计数器是否运转
Flash擦除或者更新Flash中的数据
Tlbread显示CPU的所有TLB表
Tlbwrit设置CPU的TLB
Macaddr设置CPU的MAC地址
Seti设置平台的IP地址

这些命令涉及到平台调试的各个方面,像内存检测、Flash操作、文件下载等。借助于这些命令,不仅可以完成硬件平台的部分测试,还完成了作为CE的BootLoader程序最为重要的一个功能——下载CE映像。

3.3 下载部分

在用Platform Builder编译生成CE的映像文件后,接下来就需要将该文件下载到目标板上。如果说硬件调试功能可以由其它的程序代替而不放入BootLoader中,但是下载映像文件却是BootLoader必需的功能。

CE映像文件通常叫做nk.bin,它是Windows CE二进制数据格式文件,不仅包含了有效的程序代码,还有按照一定规则加入的控制信息。当然,也可以选择生成.sre格式的代码文件,但是相于对前一种格式,它的代码要长很多,所需要的下载时间也更长。在这里,我们以下载.bin格式的文件来说明下载的实现。

首先看一下图3所示的BootLoader下载部分的流程图。

通常,在Platform Builder自带的代码中,会包含完成TFTP连接的了基本的函数。

*初始化TFTP连接:用函数EbootInitTFtp()和EbootInitTFtpd()完成。

*登记解析.bin格式数据的回调函数:用EbootTFtpdServerRegister()完成。

*发出连接请求:用EbootSendBootme()完成。

*接收主机端发出的数据包:用EbootTFtpReceiver()完成。

在这里,需要重点说明的有两点。

①对于接收数据包的函数EbootTFtpReceiver(),它只能处理已经存入内存的以太网包,也就是说,从以太网控制器接收数据的功能必须要用户去完成。由于这一功能与硬件密切相关,所以不能使用PB自带的函数来完成。

②函数EbootTFtpdServerRegister()会登记一个回调函数,一般用户可以自己定义这个函数,该函数用于完成,bin格式数据的解析和保存,有效数据至目的地RAM。PB有自带的例程函数可作参考。一般来说,如果目的地就是RAM的话,直接参考例程函数即可。但是如果目的地就是Flash,不要直接存入Flash(字为单位),应先存入内存中待下载完毕以后再导入Flash。当然,这种方法必须要有足够的内存。如果没有足够的内存,也可以缓存部分数据后,分段写入Flash。javascript:window.open(this.src);" style="cursor:pointer;"/>

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的步骤,调用相应的读写函数完成这一过程。对于开发包中相关函数的说明,笔者就不具体介绍了,可以参考开发包的说明文档。

4 BootLoader的编译、链接和下载

BootLoader程序可以通过PB的集成编译环境编译链接,控制文件为.bib文件,下面是一个简单的BootLoader的.bib文件。

MEMORY

CLI 9fc00000 00050000 RAMIMAGE

RAM 80080000 00070000 RAM

CONFIG

COMPRESSION=ON

SRE=ON

ROMSTART=9fc00000

ROMSIZE=00020000

ROMWIDTH=32

ROMOFFET=000000

MODULES

Nk.exe $(_FLATRELEASEDIR).exe CLI

MEMORY部分定义了生成的映像文件的目标地址,以及程序运行可以使用的内存空间。

CONFIG部分:COMPRESSION是否对目标代码进行压缩;SRE是否生成格式为sre的目标代码;ROMSTART与ROMSIZE、ROMWIDTH、ROMOFFSET共同定义了开发平台上存放BootLoader物理介质的起始地址、大小、宽度和偏移量。
javascript:window.open(this.src);" style="cursor:pointer;"/>
    MODULES部分定义了BootLoader所包含的文件,一般就只有一个文件:cli.exe。

编译过程中,首先用命令build-c编译生成文件cli.exe,然后用romimage cli.bib命令产生最后的映像文件cli.sre。

对于BootLoader文件的下载;有很多种方法:可以通过仿真器下载;也可以通过其它调试程序下载;还可以直接烧写到Flash中。需要说明的一点是,这些方法可能会要求不同的映像格式。在PB环境下,可以生成的有.sre格式、纯二进制格式(用于直接烧写Flash)以及和CE映像一样的.bin格式。

结语

从CE的BootLoader开发流程可以看出,BootLoader在完成下载CE映像和加载映像的主要功能外,还具有一些调试硬件的功能。当然,这些功能不是必需的,随不同的用户可能有自己的定义。但是不管Loader的功能设计得多么简单或者是多么复杂,都是在开发CE系统中不可跳过的一环。实际上,由于Loader有和CE系统交互数据的区域,所以还有对CE启动过程的控制作用,也是PB控制目标板CE启动的一个窗口。可以说,一个功能齐全的Loader,不论是对调试硬件,还是控制和检测CE系统,甚至是成为产品之后的维护工作,都是大有帮助的。

编写BootLoader是开发WinCE系统第一步,也是关键的一步。只有得到一个稳定工作的Loader程序,才能够更进一步开发WinCE的BSP,直至最后整个系统的成功。



上一页  [1] [2] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:13,593.75000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号