首先引用一段百度百科,看一下比较规范的说法:“Boot Loader 是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Boot Loader 是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的 Boot Loader 几乎是不可能的。”
Boot Loader的启动过程可参照 http://blog.csdn.net/zhandoushi1982/article/details/4599934。在此先引用一段:“ 从固态存储设备上启动的 Boot Loader 大多都是 2 阶段的启动过程,也即启动过程可以分为 stage 1 (汇编部分)和 stage 2 (C语言部分)两部分。第一阶段:A,基本的硬件初始化(屏蔽依赖于CPU体系架构的所有中断,关闭CACHE);B,为第二阶段准备RAM;C,复制第二阶段的CODE到RAM;D,设置堆栈;E,跳转到第二阶段的C入口点。第二阶段:A,初始化本阶段的硬件设备;B,建立内存映射;C,将内核映像和根文件系统映像从FLASH读到RAM中;D,设置内核启动参数;E,调用内核。”
计算机的BIOS主要功能是为计算机提供最底层的、最直接的硬件设置和控制,比如定义从什么地址启动操作系统,嵌入式世界里的Boot Loader与计算机的BIOS具有类似的地位和作用。计算机由低到高可简单分为硬件层、驱动层、操作系统层、应用层,驱动层对硬件层进行打包封装。我们配置BIOS选项的时候,有“从光盘启动操作系统、从U盘启动操作系统”的选项,那我们可以推测,BIOS包含光驱驱动、USB驱动等。类似的,嵌入式世界里,我们往往通过拨码开关设置嵌入式操纵系统的启动位置,所以我们也可以推测Boot Loader中也包含相应的驱动。
每种不同的 CPU 体系结构都有不同的 Boot Loader。有些 Boot Loader 也支持多种体系结构的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS。U-Boot全称 Universal Boot Loader,是Boot Loader的一种。百度百科上有个说法(但是现在不是很明白,以后读一下其源码才能明白):“U-Boot的源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。”U-Boot具有丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等。