ARM Boot Loader 简介(一)

来源:百度文库 编辑:神马文学网 时间:2024/04/28 17:50:07
ARM Boot Loader简介(一)
1 Boot Loader概述
简单地说,在操作系统内核运行之前,通过一小程序,可以初始化硬件设备、建立内存空间的映射图等,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核配置好相应的环境,也可以下载文件到系统板上的SDRAM,对Flash进行擦除与编程,这个小程序一般称为Boot Loader。可以说,一个功能完善的Boot Loader已经相当于一个微型的操作系统了。
Boot Loader作为系统复位或上电后首先运行的代码,一般应写入Flash存储器并从起始物理地址0x0开始。Boot Loader是非常依赖于硬件而实现的,而且根据实现的功能不同,其复杂程度也各不相同。一个简单的Boot Loader可以只完成USB口的初始化,而功能完善的Boot Loader可以支持比较复杂的命令集,对系统的软硬件资源进行合理的配置与管理。因此,建立一个通用的Boot Loader几乎是不可能的。
尽管Boot Loader的功能各不相同,我们仍然可以对Boot Loader归纳出一些通用的概念来,以指导用户对特定要求的Boot Loader设计与实现。Boot Loader一般应包括系统初始化过程,然后用户根据其系统的自身需求,具体设计。
系统初始化代码直接对ARM微处理器内核及硬件控制器编程,多采用汇编语言编程,初始化代码一般应包括如下典型任务:
1.       定义程序入口点;
2.       设置异常和中断向量表;
3.       初始化存储设备;
4.       初始化堆栈指针寄存器;
5.       初始化用户执行环境;
6.       呼叫主应用程序。
1.1 定义程序入口
初始化代码必须定义整个程序的入口点。通过伪指令Entry指定编译器保留该段代码,同时配合链接器的设置,确定整个程序的入口点。
1.2 设置异常和中断向量表
异常和中断处理是嵌入式系统的重要核心部分。它们负责处理错误、中断和其它由外部系统触发的事件。
ARM要求异常向量表必须放置在从0地址开始,连续32(8X4)字节的空间内,各异常的位置如表1所示。
每当一个异常发生以后,系统执行完当前指令后,ARM微处理器会执行以下几步操作:
(1)          把cpsr保存到相应异常模式下的spsr;
(2)          把pc保存到相应异常模式下的lr;
(3)          设置cpsr为相应的异常模式(异常及其对应的模式见图1);
(4)          设置pc为相应异常处理程序的入口地址。
因为每个异常只占据向量表中1个字的存储空间,只能放置一条ARM指令,所以该指令必须使程序跳转到存储器存储异常处理程序的地方,再执行异常处理程序。
执行完异常处理程序,要从异常中断处理程序中返回。
从异常中断处理程序中返回包括下面两个基本操作:
(1)          恢复被屏蔽的程序的处理器状态
(2)          返回到发生异常中断的指令的下一条指令处继续执行。
当异常发生时,程序计数器PC所指的位置对于各种不同的异常是不同的,同样,返回地址对于各种不同的异常中断也是不同的。例外的是,复位异常中断处理程序不需要返回,因为整个应用系统是从复位异常中断处理程序开始执行的。
总的来说,异常处理过程为:当异常发生时,系统执行完当前指令后,将跳转到相应的异常处理程序处执行。当异常处理程序执行完成后,程序返回到发生异常的指令的下一条指令处执行。在进入异常处理程序时,要保存被中断的程序的执行现场。从异常处理程序退出时,要恢复被中断的程序的执行现场。
IRQ和FIQ异常是用来处理外围设备中断的,不同的ARM芯片生产商,生产的芯片会有所不同。