1、bootloader 基本概念
(1) 在嵌入式操作系统中,BootLoader 是在操作系统内核运行之前运行,通常从内存地址 0x00000000 开始执行.
作用: 初始化硬件设备、建立内存空间映射图,将系统的软硬件环境带到一个合适状态,
以便为最终调用操作系统内核准备好正确的环境.
(2) 基本特点:
a) Bootloader是基于特定硬件平台来实现;
b) Bootloader不但依赖于CPU的体系结构; 而且依赖于嵌入式系统板级设备的配置.
2、bootloader 启动过程
Bootloader启动大多数都分为两个阶段:
(1) 第 1 阶段: 主要包含依赖于CPU的体系结构硬件初始化的代码,通常都用汇编语言来实现。
这个阶段的任务有:
a) 基本的硬件设备初始化(屏蔽所有的中断、关闭处理器内部指令/数据Cache等).
b) 为第 2 阶段准备RAM空间;如果是从某个固态存储媒质中,则复制Bootloader的第 2 阶段代码到RAM.
c) 设置堆栈.
d) 跳转到第二阶段的C程序入口点.
备注: 在第 1 阶段中为什么要关闭Cache?
=> 通常使用Cache以及写缓冲是为了提高系统性能,但由于Cache的使用可能改变访问主存的数量、类型和时间,因此Bootloader通常是不需要的。
(2) 第 2 阶段:通常用C语言完成,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。
这个阶段的任务有:
a) 初始化本阶段要使用到的硬件设备。
b) 检测系统内存映射。
c) 将内核映像和根文件系统映像从Flash读到RAM。
d) 为内核设置启动参数。
e) 调用内核。
3、常见的 bootloader
(1) Redboot: 它是 Redhat 公司随eCos发布的一个BOOT方案,是一个开源项目。
Redboot支持的处理器构架有ARM,MIPS,MN10300,PowerPC,Renesas SHx,v850,x86等,是一个完善的嵌入式系统Boot Loader.
(2) ARMboot: 它是一个ARM平台的开源固件项目,它特别基于PPCBoot,一个为PowerPC平台上的系统提供类似功能的姊妹项目。
鉴于对PPCBoot的严重依赖性,已经与PPCBoot项目合并,新的项目为U-Boot。
(3) U-Boot: 它是由开源项目PPCBoot发展起来的,ARMboot并入了PPCBoot,和其他一些arch的Loader合称U-Boot.
U-Boot支持的处理器构架包括PowerPC,ARM,MIPS,x86等等,
U-Boot(Universal Bootloader) 它是在GPL下资源代码最完整的一个通用Boot Loader.