Motorola微处理器的bootloader分析与应用
设定板上处理器类型和其它模块功能。
Board.h
设定板上各参数信息,如片外Flash和SDRAM大小、类型、数据宽度和地址范围、划分板上内存空间范围、系统时钟大小、系统总线速率以及一些其它要用到的系统常量。
⑤ 连接配置文件:Flash.lcf。
设定连接时各函数空间地址及内存分配。
⑥ 预包含头文件:mxxxx_mwerks.h和mwerks.h。
两函数被所有的C语言和汇编语言函数包含,它们设定CodeWarrior 预处理器所用到的常量和编译器编译选项。
2 bootloader运行流程简介
bootloader启动流程如图2所示。
系统上电复位后,跳到Boot ROM的最低地址处。Boot ROM的开始空间FFE00000~FFE00400为vector.s中的中断矢量表。将表中第一个32位字传给5307的SP,将第二个32位字传给PC,即完成复位中断跳转。
该复位中断跳转到vector.s中的start处。此处仅初始化sr,然后跳转到mcf5307_lo.s中的asm_startmeup。该段代码首先进行部分初始化和真正初始化前的准备工作:禁止Cache、禁止中断和地址转换、初始化用户指定的内部模块(MBAR)和内部SRAM(RAMBAR)起始地址。然后,将SP指向内部SRAM空间,即当调用真正的初始化程序时用内部SRAM的一段地址空间作为临时堆栈。接下来,调用sysinit.c文件中的外围电路和系统配置的初始化程序mcf5307_init()。
mcf5307_init()函数顺序调用各个功能的初始化子函数,初始化系统集成模块、并行通用输出输入口、串口、I2C控制器、DMA控制器、片选寄存器、SDRAM控制器。当运行完mcf5307_init()后,流程回到asm_startmeup中。此时,外围电路和内部模块已按用户要求进行了正确的配置,系统的初始化已基本完成。于是,将堆栈指针SP指向用户要求的堆栈空间,该堆栈为该板上的外部SDRAM空间。最后,跳转至main函数。
在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文件。
《Motorola微处理器的bootloader分析与应用(第2页)》