1、概念
简而言之即在具有操作系统(Linux内核)的嵌入式设备启动操作系统启动前运行的一段引导程序。
2、功能
(1)初始化硬件设备
(2)建立内存空间的映射图
(3)完成内核的加载,为内核设置启动参数
从而准备好一个适合操作系统运行的软硬件环境。
3、bootLoader程序结构框架
嵌入式系统中的boot Loader 的实现完全依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为第一阶段和第二阶段两大部分,依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在阶段1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而阶段2 则通常用C语言来实现,这样可以实现一些复杂的功能,而且代码会具有更好的可读性和可移植性。
(1)、Boot Loader 的阶段1通常主要包括以下步骤:
硬件设备初始化;
拷贝Boot Loader的程序到RAM空间中;
设置好堆栈;
跳转到阶段2的C入口点。
(2)、Boot Loader的阶段2通常主要包括以下步骤:
初始化本阶段要使用到的硬件设备;
系统内存映射(memory map);
将kernel映像和根文件系统映像从Flash读到RAM空间中;
为内核设置启动参数;
调用内核。
3、常见的BootLoader
Redboot:
Redboot是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目。
U-Boot:
U-Boot是由开源项目PPCBoot发展起来的,ARMboot并入了PPCBoot,和其他一些arch的Loader合称U-Boot。2002年12月17日第一个版本U-Boot-0.2.0发布,同时PPCBoot和ARMboot停止维护。
Bootldr:
Bootldr是康柏(Compaq)公司发布的,类似于compaq iPAQ Pocket PC,支持SA1100芯片。它被推荐用来引导Llinux,支持串口Y-modem协议以及jffs文件系统。
Blob:
Blob(Boot Loader Object)是由Jan-Derk Bakker and Erik Mouw发布的,是专门为StrongARM 构架下的LART设计的Boot Loader。
4、u-boot的启动流程及典型操作系统的启动流程
我们通常使用交叉编译工具对BootLoader的源码进行编译,再通过下载器或者SD卡将boot烧写至开发板上。