BootLoader简介


一、BootLoader
    1、BootLoader的作用
            一个嵌入式linux系统从软件的角度看通常可以分为4个层次:
                引导加载程序(boot代码和BootLoader)
                Linux内核
                文件系统 + (GUI)
                用户应用程序
            引导加载程序是系统加电后运行的第一段软件代码,用于将内核映像从硬盘上读到RAM中,实现到
        核的入口点去运行,即开始启动操作系统。
            简单的说,BootLoader就是在操作系统内核运行之前运行的一小段程序,通过这段小程序,可以初始
        化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个适合的状态,以便为最终调用操
        作系统内核准备好正确的环境。
    
    2、BootLoader操作模式:(大多BootLoader都包含两种不同的操作模式)
        (1)、启动模式:BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程
                         没有用户的介入。
        (2)、下载模式:目标机上的BootLoader通过串口连接或联网等方式从主机上下载文件(内核映像、根
                         文件系统映像...),保存到目标机的RAM中,接着再被BootLoader写到目标机的Flash
                         类固态存储设备,该模式下通常会向终端用户提供一个简单的命令行接口。
二、常用的BootLoader
        ARMBoot, PPCBoot, U-Boot, RedBoot, Blob, Vivi
        
三、BootLoader基本原理(假定内核映像与根文件映像(可以在固态存储设备运行)都被加载到RAM中运行)
        通常,BootLoader是严重地依赖于硬件而实现的,除了依赖于CPU的体系结构外,BootLoader实际上也依
    赖于具体的嵌入式板级设备。
        由于BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader分为stage1和stage2两个部分。
        stage1:存放依赖于CPU体系结构的代码,如设备初始化代码(通常用汇编语言实现)。
        stage2:存放实现更复杂的功能的代码,通常使用C语言实现,代码具有更好的可读性和可移植性。
        BootLoader的stage1通常包括以下步骤:
            (1)、硬件设备初始化
            (2)、为加载BootLoader的stage2准备RAM空间
            (3)、复制BootLoader的stage2到RAM空间中
            (4)、设置好堆栈
            (5)、跳转到stage2的C入口点
        BootLoader的stage2通常包括以下步骤:
            (1)、初始化本阶段要使用到的硬件设备
            (2)、检测系统内存映射
            (3)、将内存映像和根文件系统映像从Flash上读到RAM空间中。
            (4)、为内核设置启动参数
            (5)、调用内核