WinCE系统下BootLoader的开发
首先要实现初台化硬件的功能。在参考板的BootLoader目录下,会发现一些.s文件,可能会是init.s或者是reset.s等,这样的文件是CPU加电后最先执行的代码。由于此处是用汇编语言编写的,所以与CPU关系紧密。一般参考板的CPU与开发平台的CPU会是相同或者是同一个架构的。笔者使用的是属于同一种CPU的情况,所以对寄存器的定义和初始化流程都可以不加改动。接着就是对于平台配置的分析,包括平台存储空间的分配、外围设备的工作设定等。一般这里的区别是非常大的。所以必须要对CPU寄存器的值作相应设定。这部分工作可能需要CPU提供商方面的帮助。
应该说,这部分工作是BootLoader的一大重点,但由于和实际的硬件非常大,所以不可能做进一步的详细叙述。
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()完成。
*接收主机端发出的数据包:用EbootTFt
《WinCE系统下BootLoader的开发(第2页)》