Bootloader流程简介
(通用的linux内核,启动时需要很多参数 ,这些参数必须通过Bootloader传递。而且内核一半是压缩存放在外存上的,从外存到内存的复制也是由Bootloader完成。从Bootloader的第二个功能就知道,Bootloader时不能与内核放在一起的。由于Bootloader的实现依赖于CPU的体系结构,因此大多数的Bootloader都分为Stage1和Stage2l辆大部分)
依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在Stage1中,而且通常用汇编语言来实现,以达到短小精悍的目的。而Stage2则通常用C语言来实现,这样可以实现复杂的功能,并且代码会具有更好的可读性和可移植性。
(1)Bootloader的Stage1通常包括以下步骤。
1:硬件设备初始化
2:为加载Bootloader的Stage2准备RAM空间
3:将Bootoader的Stage2复制到RAM空间中
4:设置好堆栈
5:跳转到Stage2的C入口点
(2)Bootloader的Stage2通常包括以下步骤。
1:初始化本阶段要使用到的硬件设备
2:检测系统内存映射(Memory Map)
3:将Kernel映像和根文件系统映像从Flash上读到RAM空间中
4:为内核设置启动参数
5:调用内核。
Stage1:汇编阶段
1:基本硬件初始化
(1)屏蔽所有中断。
(2)设置CPU的速度和时钟频率。
(3)RAM初始化。包括正确地设置系统的内存控制器的功能寄存器以及各内存控制寄存器等。
(4)初始化LED。(或者初始化串口,用于表示当前状态)
(5)关闭CPU内部指令/数据Cache。
2:为加载Stage2准备RAM空间
**为了获得更快的执行速度,通常把Stage2加载到RAM空间中来执行**,因此必须为加载Bootloader的Stage2准备好一段可用的RAM空间范围。主要工作是对预备空间进行读写测试。
3:复制Stage2到RAM中
复制时注意