1.含义和功能:
Bootloader,称为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS。
Bootloader通常固化在硬件上某个固态存储设备上,加电后自启动。
bootloader要实现的功能就是:在系统上电或者复位后,将系统的软硬件环境带到一个合适的状态,为最终调用应用程序准备好正确的环境。它包括:
- 初始化硬件设备
- 建立正确的内存空间映射
- 初始化栈
- 检测并初始化内存
- 初始化全局变量
- 加载程序,将非易失性存储器中的特定软件组拷贝到RAM中,并运行。
Bootloader的主要任务是:正确地调用内核来加载操作系统。
在基于ARM的嵌入式系统中,系统在上电或复位时通常都从地址0x0000,0000处开始执行,而在这个地址处安排的通常就是系统的Bootloader。
2. 分类:
Bootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的Bootloader。不过Bootloader的发展也趋于支持多种体系结构,如现在比较成熟的vivi、RedBoot和U-Boot等。
1)vivi
vivi是韩国Mizi公司开发的Bootloader,适用于ARM9处理器。
2)RedBoot
RedBoot也称作红帽(Red Hat)嵌入式调试引导程序,是一种用于嵌入式系统的独立开放源代码引导/装载器。
3)U-Boot
U-Boot(Universal Bootloader)是一款目前功能较为强大的开源Bootloader程序,它支持多种处理器平台,包括ARM、MIPS等。
Bootloader操作模式
3. 工作模式
大多数Bootloader都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这种区别仅对于开发人员才有意义。
•从最终用户的角度看,Bootloader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。
1)启动加载(Bootloading)模式
启动加载模式称为“自举”(Autonomous)模式。即Bootloader从目标机上的某个固态存储设备上将操作系统加载到 RAM中运行,整个过程并没有用户的介入。
启动加载模式是 Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。
2)下载(Downloading)模式
在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机上下载文件。
比如:下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被 Bootloader写到目标机上的FLASH类固态存储设备中。
Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用到这种工作模式。
工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。如在RedBoot下,将出现“RedBoot>”提示符。
像RedBoot或U-Boot等功能强大的Bootloader通常都可同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。
比如,RedBoot在启动时处于正常的启动加载模式,但是它会延时3秒等待终端用户按下任意键而将RedBoot切换到下载模式。如在等待时间内没有接收到用户按键,则继续启动Linux 内核。
4.通用概念:
通常,Bootloader是严重依赖硬件的,特别是在嵌入式当中。因此,在嵌入式中建立一个通用的Bootloader是几乎不可能的事情。但是还是可以对Bootloader归纳出一些通用的概念来进行学习。
(1).Bootloader所支持的CPU和嵌入式开发板
每种不同的CPU体系结构都有不同的Bootloader。有些Bootloader也支持多种体系结构的CPU,比如U-Boot就同时支持ARM和MIPS结构体系。除了依赖于CPU的体系结构外,Bootloader实际上也依赖于实际的嵌入式开发板设备的配置。
(2).Bootloader的安装媒介
系统加电或复位后,所有的CPU都会从某个由CPU制造厂商预先安排的地址上取指令。而基于CPU构建的嵌入式系统都有某种类型的固态存储设备(如 ROM,EEPROM,或FLASH等)被映射到这个预先安排的地址上,因此在系统加电后,CPU将首先执行Bootloader程序。
(3).Bootloader的启动过程分为单阶段和多阶段,通常多阶段的Bootloader能提供更为复杂的功能,以及更好的可移植性。
(4).Bootloader与主机之间的进行文件传输时所用的通信设备以及协议
分为两种情况,一.目标机使用串口与主机相连。这时的传输协议通常是xmodem/ymodem/zmodem中的一种。但是串口的速度实在有限,所以还可以用网络连接的方式传输文件,这时使用的协议多为tftp。
5.空间示意图:
下图就是一个有Bootloader,内核启动参数,内核映像和根文件系统映像的典型固态存储设备的空间分配结构示意图: