首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

嵌入式系统引导技术研究 03

嵌入式系统引导技术研究 03

 MPC860的复位是通过一种异常中断来处理的(可理解为CPU自己产生的中断),向量号为0x100。异常向量表的基地址加上复位向量号即为复位向量,也就是CPU开始执行指令的地方。异常向量表在内存空间的可能位置有两个:0x0000000和0xFFF00000。所以PowerPC的复位向量为0x100或0xFFF00100。假设复位向量为0xFFF00100,系统有128K字节的Flash,并准备把它映射到CPU内存空间0xFE000000开始的地址。MPC860内部的CS0片选信号是默认的系统启动片选信号,已被连接到Flash的片选线上。上电时,内存控制器会忽略所有参与征选逻辑的地址线的高17位,CS0总是有效。这样,Flash总会被选中,CPU从Flash偏移0x100的地方取指令,此时CPU的4GB内存空间的每个128KB的块都被映射到Flash。



  2.2.2 寄存器初始化



  固化方式下的大致相同,但是不再采用脚本文件编写,而是直接将一段MPC860汇编程序存放在一个start.s文件中。与调试模式初始化程序一样,主要完成以下处理:



  (1)初始化CPU核心寄存器;



  (2)设置机器状态寄存器;



  (3)禁止ceche;



  (4)初始化IMMR;



  (5)初始化系统接口单元(SIU);



  (6)初始化时钟和中断控制寄存器;



  (7)初始化通信处理机(CPM);



  (8)初始化内存控制器(UPM);



  (9)初始化C语言堆栈。



  2.2.3 地址空间重映射



  上电时,由于只有一个片选信号有效,它选通了Flash,而RAM和其它存储设备地址无效,需要经过地址空间重映射才能访问。MPC860的地址空间重映射是通过设置0R0~OR7、BR0~BR7这十六个寄存器完成的。由于上电时4GB的地址空间均被Flash占用,所以0xFFF00100这个地址仍在Flash的偏移0x100处。在寄存器初始化过程中,需要把SDRAM、MPC860内部寄存器空间以及外设等也映射进来。在进行这些操作前,需要把Flash的位置固定下来,例如映射到0xFE000000,这个操作是通过设置OR0和BR0寄存器实现的。但在写OR0时,CPU仍然在0xFFF00000的那一块取指令,而Flash即将被映射到0xFE000000块,所以程序必定出现“跑飞”的现象,必须对程序计数器(PC)进行调整,然而PC指针对程序员是不可见的,必须用跳转指令修改它。在Flash地址映射完成后,通过设置OR1~OR7、BR1~BR7可以完成对所有存储器空间的映射,各种存储设备可映射在CPU地址空间中的任意位置,但相互之间不能冲突。



  2.3 引导代码的构成和运行



  系统启动所涉及的代码由寄存器初始化汇编文件start.s、一个Load程序以及操作系统与应用程序的Image三部分构成,引导代码则只包含start.s和Load程序。Load程序的作用是将操作系统与应用程序的构成的Image从Flash拷贝到SDRAM中,并跳转到Image的首条指令。调试完成后的Image有两种运行模式:



  Flash-resident imageoad程序仅仅 把Image中的数据段(data+bss)复制到RAM中,代码段(text)在Flash中直接运行。



  Flash-based imageoad程序把Image完全搬到RAM中执行,包括image中的代码段(text)和数据段(data+bss)。



  图2和图3分别描述了两种Image的存贮映象,以及从Flash到SDRAM的装载过程。



  2.4 时间效率和空间效率上的折衷



  在嵌入式系统的应用过程中,针对不同的应用环境,对时间效率和空间效率有不同的要求,基于MPC860的启动代码对此有比较充分的解决方案。



  2.4.1 时间限制



  时间限制主要包括两种情况:系统要求快速启动和系统启动后要求程序高速执行。



  对于要求快速启动的系统,应该使在Flash中执行的初始化程序尽量简短,诸如循环语句之类的语法应该尽量减少,尽快将程序装载到RAM中执行,这样做的原因在于Flash的访存时间与RAM的访存时间存在数量级上的差距。但是必须根据代码量以及存储器的特片进行权衡。因为,虽然RAM中捃速度快,但是将Flash中的代码复制到RAM中的操作会带来一定的开销。由于可见,启动时间由Flash中引导代码的运行时间、代码从Flash拷贝到RAM的时间以及RAM中后续启动代码的运行时间三部分组成。启动时间的最小值是这三者和的最小值。



  对于启动后要求程序高速执行的系统,主要受处理器、存储器特性以及I/O速度等的影响。在软件方面,应该采用了上述Flash-based image方式,使得代码段在RAM中运行,提高运行速度。



  2.4.2 空间限制



  空间限制主要包括两种情况:Flash等非易失性存储空间有限和RAM等易失性空间有限两种系统。



  对于采用高性能非易失性存储器的系统,出于成本因素,Flash等存储设备不能太大,然而它又是系统存放启动代码和操作系统Image的地方。在存放Image时,可以先使用gzip等压缩工具进行压缩,在将Image加载到RAM时采用逆向的解压缩算法解压。同时,出于实时性考虑,压缩算法不能过于复杂,否则压缩解压过程消耗大量时间将与启动时间限制发生严重冲突。采用压缩策略并不一定会增加系统启动时间,因为压缩解压过程虽然消息了一定的时间,但是由于Image体积减小,由Flash复制到RAM中的时间相应减少,有可能反而减少了时间消耗。



  对于采用高性能RAM的系统,同样出于成本因素,RAM空间有一定限制,此时一般采用前文描述的Flashresident image方式:Load程序把Image中的数据段复制到RAM中,代码段在Flash中运行。折衷同样存在,因为code段在低速的Flash中运行,在节省空间的同时,却牺牲了时间。

返回列表