Motorola微处理器的bootloader分析与应用
在main中,首先将系统的矢量表从Flash空间拷贝到用户指定的外部SDRAM中。然后,将Flash中的data段初值拷贝到外部SDRAM指定的data空间中,根据配置将外部SDRAM中的bss段清0,之后进行一些系统全局数据结构、参数表等的初始化。最后,调用mainloop开始人机交互循环:不断接收用户的命令、根据命令查表调用相应的任务函数、在界面上打印出相应的执行信息。
3 bootloader用户应用
(1)bootloader的系统移植
由于Motorola的dBUG bootloader为一标准的范例程序,要将其移植到具体的嵌入式系统中,还需要根据系统的硬件配置,修改其部分配置文件和底层接口文件。本文以用于网络数据存储的ColdFire5307C3开发板为例,介绍在其上的dBUG移植过程。
①ColdFire5307C3开发板硬件情况:
ColdFire5307 32位处理器,16MB (32位数据总线)SDRAM,2MB (16位数据总线)Flash ROM,2 UART,10Mbps (16位数据总线)以太网接口。
②修改bootloader的处理器和配置相关文件:
a. 根据5307处理器手册及用户需要,修改vector.s中的中断矢量表。
b. 根据5307处理器手册编写mcf5307_lo.s文件。
c. 根据板上的硬件配置修改sysinit.c文件,编写相应的硬件初始化函数。
d. 根据系统配置修改config.h和board.h文件。
e. 根据需要修改mxxxx_mwerks.h和mwerks.h,设定某些编译选项。
f. 根据需要修改连接配置文件Flash.lcf,设定连接时目标代码的地址分配。
g. 编写相应的硬件驱动,如该板上用到的MBM29LV 160BE70 Flash芯片的驱动程序文件am29xxxx.c和am29 xxxx.h、该板上用到的网卡芯片的驱动程序文件Ns8390.c以及5307的串口驱动函数等。
(2)bootloader命令简介[2]
dBUG提供了丰富的调试命令:
① 程序流程控制命令reset(系统重启)、go、exe(用户程序执行)、br(断点设置)、step(单步)、trace(单步跟入)、gt(运行到);
② 内存和寄存器操作命令md、mm(内存查看和修改)、rd、rm(寄存器查看和修改)、bm(内处块移动)、bf(内存块数据填充)、bc(内存块比较)、bs(内存块查找);
③ 指令和数据操作命令dc(数据转换)、dis(反汇编)、asm (汇编指令插入)、sym(符号表管理);
④ 程序下载命令dl(通过串口下载)、dn(通过网络下载)。
(3)bootloader用户功能扩展
除了dBUG bootloader本身提供给用户的命令外,用户还希望根据不同的情况定制自己的命令。如Linux加载、μC/OS加载、kermit下载等。一般自己添加的命令都会放在一个单独的C文件里面。为了方便,用户也将自己添加的命令都放在board.c文件的最后。
例如,用户想要给dBUG添加μC/OS操作系统加载的功能,除了在dBUG中加上自己的程序加载代码外,还应给dBUG添加一个名为ucosii的用户命令。这样可以通过在界面上输入命令的形式实现相应的加载功能。首先应该在board.c里面实现这个函数:
ucos_boot (int argc, char **argv)
{
…………
}
而后,应在cmds.c文件里面声明这个函数,并在紧接着的UIF_CMD UIF_CMDTAB数组里面声明这个命令的特性和参数。
{“ucosii”, 4,0,0,0,ucos_boot, “Boot uCOS-II from RAM”,””},
其中,第一个test字符串是命令的名称,第二个4表明命令识别的时候要匹配4个字符才行,最后的字符串是help命令时对test命令的解释。在描述中间的test表明指向的函数名称。这样就很方便地添加了这个用户命令。
4 结 论
综上所述,Motorola公司的dBUG软件由于其良好的源代码组织结构使得用户在其上开发应用非常方便,用户稍加修改就可将其移植到不同的硬件平台上。它拥有良好的用户界面,不仅可以完成用户所需的程序下载、加载等功能,而且还可以方便地进行调试,使用户可以更好地监控自己的程序。除此之外,用户还可以很方便地添加自己所要的功能,其结构具有良好的可扩展性。所以,Motorola公司的dBUG bootloader的确是一个优秀的bootloader范例,给广大的嵌入式系统开发者提供了一个不错的选择。