一个嵌入式Linux系统从软件的角度通常分为以下四个层次:
- 引导加载程序。包括固化在firmware中的boot代码(可选),和Bootloader两大部分。
- Linux内核。
- 文件系统。
- 应用程序。
Bootloader概念
在嵌入式操作系统中,Bootloader是硬件启动的引导程序,是运行操作系统的前提;在操作系统内核或用户应用程序运行之前运行的一小段代码,对软硬件进行相应的初始化和设定,为最终运行操作系统准备好环境,类似于X86计算机中的BIOS固件;Bootloader不属于操作系统,一般采用汇编语言和C语言开发,需要针对特定的硬件平台(比如arm、powerpc、MIPS等)编写,Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。对于2块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上,一般也都需要修改Bootloader的源程序。
Bootloader的两种操作模式
自启动模式:在这种模式下,Bootloader从目标机上的某个固态存储设备上将操作系统(kernel)加载到RAM中运行(读取bootcmd参数),整个过程并没有用户的介入。
交互模式:在这种模式下(uboot可在倒计时按任意键进入到这种模式),目标机上的Bootloader将通过串口或网络等方式从开发主机(Host)上下载内核映像和根文件系统映像等到RAM中,可以被 Bootloader写到目标机上的固态存储媒质中,或者直接进行系统的引导。也可以通过串口接收用户的命令。
Bootloader的基本功能
- 初始化相关硬件
- 把bootloader自搬运到RAM中
- 执行用户的命令
- 访问环境变量
- 通过网络/串口通信
- 读写RAM/FLASH
- 加载并执行内核
常见的Bootloader
- Redboot:Redhat公司随eCos发布的一个BOOT方案,是一个开源项目,Linux操作系统引导,在线读写Flash。
- ARMboot:ARM平台的开源固件项目,2002年ARMboot终止了维护。
- U-Boot:ARMboot并入了PPCBoot,和其他一些平台的Loader合称U-Boot,是目前最常用的bootloader。
- Blob、Bios-lt、Bootldr、vivi等