从软件的角度来看,一个嵌入式Linux的系统通常可以分为4个层次:
1、引导加载程序。包括固化在固件(Firmware)中的Boot代码(可选)和Bootloader两大部分。
2、操作系统内核。如Linux内核。通常还包含内核的启动参数。
3、文件系统。包括根文件系统和建立在Flash内存设备之上的文件系统。在嵌入式系统中,通常用Ramdisk来作为文件系统。
4、用户应用程序。针对特定用户的专用应用程序。又是在用户应用程序和内核层之间还可能会包括一个嵌入式图形用户界面。
Bootloader就是操作系统内核运行之前的一段小程序,通过这段小程序,可以初始化硬件设备,建立内存空间的映射图,从而将系统的软件环境带到一个合适的状态,一边最终调用操作系统内核准备正确的环境。
2、Bootloader安装位置
系统加电或复位后,所有的CPU通常都从,讴歌预先安排的地址上取指令。因此上电后,CPU将首先执行Bootloader程序。通常总是将Bootloader安装在嵌入式系统的存储设备的最前端。
3、Bootloader的启动过程
stage 1:
硬件设备初始化,通常只初始化最基本的设备,如内存控制器,串口等设备;
为加载Bootloader的stage 2 准备内存空间;
复制Bootloader到stage 2的内存空间中;
设置堆栈;
跳转到stage 2的入口点。
stage 2:
初始化本阶段要使用到的硬件设备,如以太网,USB等;
检测系统内存映射;
将内核映像和根文件系统映像从固体存储器Flash等上读到内存空间中;
设置内核启动参数;
启动内核。
3、Bootloader的操作模式
启动加载模式和下载模式。
启动加载模式也称自主模式,即Bootloader从目标机上的某个固态存储设备上将操作系统加载到目标板的内存空间中运行,整个过程并不需要有用户的介入。这种模式是正常的工作模式,产品发布时应该工作在这种模式下。
下载模式:在这种模式下,目标机上的Bootloader将通过某种通信手段,如串口连接或网络连接等,从主机下载内核映像和根文件系统映像等,这些文件首先被Bootloader保存到目标机的内存空间中,然后根据需要或在内存中运行,或被Bootloader写到目标开发机上的Flash类固态存储设备中。