一、一个嵌入式操作系统一般可以分为四个层次
1). 引导加载程序。 包括固话在固件中的boot代码,和boot loader两大部分
2). linux内核。 特定于嵌入式板子的定制内核以及内核的启动参数
3). 文件系统。 包括根文件系统和建立于flash内存设备之上文件系统
4). 用户应用程序。 有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面, 如microwindows、miniGUI
引导加载程序是系统加电后运行的第一段软件代码。在PC中,BIOS在完成硬件检测和资源分配后,将硬盘MBR中的Boot Loader读到系统的RAM中,然后将控制权交给OS Boot Loader。Boot Loader 的主要运行任务就是将内核映像从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
而在嵌入式系统中,通常没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由Boot Loader来完成。
二、Boot Loader的概念
Boot Loader就是在操作系统内核运行之前运行的一段小程序,通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便最终调用操作系统内核准备好正确的环境。
由上面的归纳,可以发现Boot Loader是严重地依赖于硬件而实现的。
1. Boot Loader 的启动过程是单阶段(single stage)还是多阶段(Multi-stage)
通常多阶段的Boot Loader 能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的Boot Loader大多都是2阶段的启动过程,也即启动过程分为stage1 和stage2 两部分
2. Boot Loader 的操作模式
启动加载模式(Boot Loading):也叫自主模式,即Boot Loader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是Boot Loader的正常工作模式。
下载模式(Downloading):在这种模式下,目标机上的Boot Loader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载内核映像和根文件系统映像等。