bootloader启动过程分析

来源:互联网 发布:mac双系统 分区 编辑:程序博客网 时间:2024/04/30 06:44

由于bootloader的实现依赖于CPU的体系结构,因此大多数的bootloader都分为stage1和stage2两大部分:依赖于CPU体系架构的代码同城携程短小精悍的汇编代码,放在stage1中,为了实现更复杂功能的代码都使用C语言,方便移植和读,一般放在stage2中。具体的启动过程如下:

1、stage1中的动作:

硬件设备初始化;

为加载stage2准备RAM空间;

复制stage2到RAM中;

初始化堆栈;

跳转到stage2的c入口。

实现的功能:硬件初始化:屏蔽了bootloader启动过程中的所有中端,设置cpu的速率和时钟,完成RAM初始化,关闭CPU内部指令和数据缓存。

           复制stage2到RAM,设置堆栈指针sp,跳转到c入口 。  


2、stage2中的动作:

初始化本阶段需要使用的硬件;

检测系统内存映射;

复制内核和根文件系统到RAM中;

设置内核启动参数;

调用内核。

  

实现的功能:硬件初始化:初始化串口;

                           加载内核镜像;

                           设置内核启动参数;

                           调用内核:CPU寄存器设置:R0=0;R1=机器类型ID;R2=启动参数标记列表在RAM的起始地址;

                                           CPU模式设置:禁止中断(IRQ和FIQ),是CPU处于SVC模式;

                                           MMU和缓存的设置:必须关闭MMU和数据缓存,指令缓存可以自主选择。

   

0 0