嵌入式Linux操作系统引导加载程序BootLoarder
BootLoarder是什么
Linux操作系统分层
一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:
- 引导加载程序。包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。
- Linux内核。特定于嵌入式板子的定制内核以及内核的启动参数。
- 文件系统。包括根文件系统和建立于Flash内存设备之上文件系统。通常用ramdisk来作为rootfs。
- 用户应用程序。特定于用户的应用程序。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI有:MicroWindows和MiniGUI等。
BootLoarder
BootLoader是嵌入式Linux操作系统的第一个层次,即引导加载程序,是硬件加电之后要运行的第一段程序,也是内核运行的引导程序。
bootloader是指操作系统的启动加载程序。
它是在操作系统内核运行之前运行的一段小程序,主要负责初始化硬件空间,初始化内存空间,调整系统的软硬件环境,以便操作系统内核启动。
Bootloader是嵌入式系统在加电后执行的第一段代码,在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行 。
不同的硬件以及不同的配置bootloader是不一样的。
不同的CPU也有不同的bootloader,有些也支持多种CPU。
嵌入式系统通常把固态存储设备地址映射好,bootloader就放在这个地址,这样系统复位之后,就可以首先执行这段程序。
采用汇编和c语言的结合方式来写程序,完成了它的使命之后,它就不再运行了。
BootLoader操作模式
大多数Bootloader都包含两种不同的操作模式:
-
启动加载模式
在这种模式下,Bootloader从目标机的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是Bootloader的正常工作模式,因此在嵌入式产品发布时,Bootloader必须工作在这种模式下。 -
下载模式
在这种模式下,目标机上的Bootloader将通过串口或网络等通信手段从开发主机(Host)上下载内核映像和根文件系统映像等到RAM中,然后可再被Bootloader写到目标机上的固态存储媒质中,或者直接进行系统的引导。
启动加载模式通常用于第一次烧写内核与根文件系统到固态存储媒质时或者以后的系统更新时使用;
下载模式多用于开发人员在前期开发的过程中,工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。
BootLoader启动过程
Bootloader启动大多数都分为两个阶段。
- 第一阶段主要包含依赖于CPU的体系结构硬件初始化的代码,通常都用汇编语言来实现。
这个阶段的任务有:
- 基本的硬件设备初始化(屏蔽所有的中断、关闭处理器内部指令/数据Cache等)。
- 为第二阶段准备RAM空间。
- 如果是从某个固态存储媒质中,则复制Bootloader的第二阶段代码到RAM。
- 设置堆栈。
- 跳转到第二阶段的C程序入口点。
在第一阶段中为什么要关闭Cache?通常使用Cache以及写缓冲是为了提高系统性能,但由于Cache的使用可能改变访问主存的数量、类型和时间,因此Bootloader通常是不需要的。
- 第二阶段通常用C语言完成,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。这个阶段的任务有:
- 初始化本阶段要使用到的硬件设备。
- 检测系统内存映射。
- 将内核映像和根文件系统映像从Flash读到RAM。
- 为内核设置启动参数。
- 调用内核。
可以看出,BootLoader的主要工作有两个:
- 硬件初始化;
- 将内核加载到RAM中,为内核启动做准备.
4902

被折叠的 条评论
为什么被折叠?



