Board logo

标题: WinCE系统下BootLoader的开发 02 [打印本页]

作者: samwalton    时间: 2014-5-30 06:45     标题: WinCE系统下BootLoader的开发 02

3.2 主控部分

从这一部分开始,均用C语言编写。

为了增加BootLoader对平台的控制,一般BootLoader都会设计成支持命令输入的方式,通过串口来接收用户的命令。这种机制中,如果参考板有Loader支持的话,那么可以自己添加有实用价值的命令,完成一些需要的功能。

从图2中可以看出,一般在平台调试完毕后,可以在不用人工干预的情况下自动加载CE(这也是BootLoader必需的功能之一);而在调试阶段,基本上是通过Loader所支持的命令来进行操作的。提供足够丰富的命令,能极大简化和全面测试开发平台。如表1所列,是笔者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。

3.4 支持DOC

对于WinCE操作系统而言,丰富的多媒体功能是其一大特点,使其成为当前消费类电子产品操作系统中的一个不错选择。但是随之而来的问题是,系统的容易已经大大超过出了传统嵌入式系统上百KB的数量级。一般来说,如果选择了图形界面和汉语支持,容量一般会超过16MB。DOC(Disk On Chip)则提供了一种相对廉价的大存储容量的解决方案。

DOC本质上是一种加以软件控制的NAND格式的Flash,通过TFFS这一软件层提供对WinCE的支持。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0