嵌入式笔记(一):引导加载程序bootloader

嵌入式笔记(一):引导加载程序bootloader

1.引导加载程序的概念和功能

引导加载程序bootloader式底层软件的一部分。嵌入式系统上电复位后首先运行bootloader,它负责系统的上电自检、硬件初始化、建立存储空间映射、配置系统参数、建立上层软件运行环境、加载和启动操作系统

bootloader一般依赖于具体的硬件结构。一般而言,支持不同硬件结构的bootloader程序又不同的版本。bootloader移植是在特定的硬件系统上进行操作系统移植的关键步骤。

与bootloader程序相关的术语数bootROM。一般而言,bootROM是指用来存储bootloader程序的非易失存储器,当前用的最多的是NOR FLASH ROM。

2.嵌入式操作系统的加载方式

2.1方式一:在ROM中直接运行操作系统代码

传统的嵌入式系统较少配置外存储器,而是将操作系统直接存储在ROM中。ROM中支持随机读出,不论是在ROM中执行代码,还是在ROM中读出信息,都不需要额外的驱动程序。嵌入式处理器复位后,执行bootloader代码,完成必要的硬件初始化等操作后,直接跳到ROM中执行操作系统。

2.2方式二:在RAM中运行操作系统

与上一个方式相同,操作系统的映像和应用程序的映像都预先烧录到ROM中,不同的是,bootloader代码在完成必要的硬件初始化后,需要把存放在ROM种的操作系统和应用程序映像拷贝到RAM中,然后跳转到RAM中执行。

由于RAM的访问速度高于ROM,因此方式二读取指令要快得多。

2.3方式三:从外存储器加载操作系统代码运行

随着固态存储器的普及,也有一些复杂的嵌入式系统配置了硬盘或者NAND FLASH等作为外存储器使用,因而从外存储器加载操作系统和应用程序也应用到了嵌入式中。

在这种方法中,操作系统映像和应用程序映像先存放在基于外存储器的文件系统中。为了加载操作系统,
bootloader中必须有访问外存储器所需要的驱动程序。处理器复位后,执行bootloader中必要的驱动程序后,将操作系统映像拷贝到RAM中,执行操作系统。

除了以上三种,还有一种是从通信口加载操作系统代码运行,就不介绍了。

3.引导加载程序的执行过程

不同的bootloader程序功能不同,启动过程也不同。大多数从FLASH存储加载器上启动的bootloader程序采用两阶段执行过程。大体如下:

阶段一

第一阶段的目的是为了让嵌入式系统能够运行起来,并为第二阶段及随后操作系统内核的运行准备好基本的硬件环境。

第一阶段通常使用汇编代码实现,一方面提高代码的执行速度,另一方面更方便对硬件进行操作。

可能包含以下操作:
●关闭中断。在bootloader阶段不能中断发生。

●处理器内部寄存器设置、系统基本参数设置、时钟初始化。

●存储器初始化。

●初始化硬件设备。

●为高级语言运行搭建环境,例如初始化堆栈指针等。

阶段二

第二阶段通常由C语言实现,以便实现操作系统加载功能。具体可能包括以下步骤:
●进一步完成操作系统的初始化。

●初始化本阶段用到的硬件设备,例如串行通信接口。

●如果在RAM中运行操作系统,需要将内核代码和根文件系统映像从ROM中复制到RAM中。

●向操作系统内核传递启动参数。

●调用内核代码。

你可能感兴趣的:(嵌入式笔记(一):引导加载程序bootloader)