四、 ARM Bootloader的共性
对于一个ARM系统来说,本质上,bootloader作为引导与加载内核镜像的“工具”,在实现上,必须提供以下几个功能,更确切地说,必须做到以下几点:
(1)初始化RAM(必需):bootloader必须能够初始化RAM,因为将来系统要通过它保存一些Volatile数据,但具体地实现要依赖与具体的CPU以及硬件系统。
(2)初始化串口(可选,推荐):bootloader应该要初始化以及使能至少一个串口,通过它与控制台联系进行一些debug的工作;甚至与PC通信。
(3)创建内核参数列表(针对linux操作系统,推荐)。
(4) 启动内核镜像(必需):根据内核镜像保存的存储介质不同,可以有两种启动方式:FALSH启动以及RAM启动;但是无论是哪种启动方式,下面的系统状态必须得到满足:
CPU寄存器的设置: R0=0
R1=机器类型;
R2=启动参数标记列表在RAM中的起始地址;
这三个寄存器的设置是在最后启动内核时通过启动参数来传递完成的。
CPU模式: 关闭中断;属于SVC模式;
Bootloader中没有必要支持中断的实现,这属于内核机制以及设备驱动管理的管理
范畴;SVC模式是系统的一种保护模式,这样就可以进行一些只能在SVC模式下的操
作,例如一些特定寄存器访问操作。
Cache和MMU的设置:
MMU必须关闭;数据cache必须关闭;指令cache可以关闭也可以开启;
Bootloader中所有对地址的操作都是使用物理地址,是实在的实地址,不存在虚拟
地址,因此MMU必须关闭。Bootloader主要是装载内核镜像,镜像数据必须真实写回
SDRAM中,所以数据cache必须关闭;而对于指令cache,不存在强制性的规定,但是
一般情况下,推荐关闭指令cache。
Bootloader启动内核镜像的方法是通过跳转语句直接跳转至内核镜像的第一句
指令语句。