目录
1.什么是Bootloader
Bootloader也叫引导加载程序,是系统加电运行后的第一段软件代码,是整个系统的第一步。嵌入式系统的Bootloader要完成内核映像加载到RAM里,还要完成硬件检测和资源分配工作,然后引导操作系统内核。不管有没有操作系统都需要这段引导程序
2.Bootloader的2种工作模式
一般Bootloader有两种操作模式,一种是启动加载模式,一种是下载模式。
2.1 启动加载模式
启动加载模式又叫自主模式,指Bootloader从目标及某个固件存储设备上将操作系统 加载到RAM运行,整个过程没有用户介入,是Bootloader的正常工作模式
2.2 下载模式
目标机上的Bootloader将通过串口或网络或USB等其它通信手段从主机下载文件,如 内核镜像,根文件系统镜像等,从主机下载的文件通常首先被Bootloader保存到目标机的 RAM中,然后被Bootloader写到目标机的Flash内的固态存储设备中。这种模式通常在第一 次安装内核和根文件系统时使用。还要系统更新也会使用这种工作模式
3.Bootloader的依赖性
不是所有的的Bootloader都是通用的,不同的硬件体系1结构是完全不同。Bootloader有初始化硬件操作,所以它必须依赖硬件实现。
另外Bootloader还依赖具体的嵌入式板机设备配置,即使两个嵌入式板卡采用同一个处理器,要想一块的Bootloader也在另外一块上也能运行,通常需要改参数和源码。
4.Bootloader的3种启动方式
Bootloader主要功能是引导操作系统启动,启动方式有网络启动,磁盘启动和Flash启动
4.1 网络启动方式
网络启动方式下,Bootloader通过以太网接口远程下载Linux内核映像或者文件系统, 使用网络启动之前需要把Bootloader安装到板上的EPROM或者Flash里,交叉开发环境就是 以网络启动方式建立,前提条件是目标板有串口,以太网接口。另外还需要在服务器配置启 动相关网络服务。
4.2磁盘启动方式
磁盘启动方式主要用在PC机的BIOS里,比如传统的Linux系统运行在台式机或者服务 器上,这些计算机一般用BIOS引导,并且使用磁盘作为存储介质。进入BIOS设置菜单,可 以探测处理器、内存和硬盘等设备,可以设置BIOS从软盘、光盘或者某块硬盘启动。但是 BIOS不直接引导操作系统,在硬盘的主引导区还需要一个Bootloader,它通过磁盘启动方 式把操作系统引导起来。
4.3Flash启动方式
Flash启动方式通常有两种,一种直接从Flash启动,另一种将压缩的内存映像文件从 Flash中复制解压到RAM,再从RAM启动。Bootloader一般在Flash的低端和顶端,根据处 理器的复位向量设置,要使Bootloader入口位于处理器上电执行的第一条指令位置。
5.NOR Flash 和NAND Flash区别
大容量下NAND FLASH比NOR Flash成本要低很多,体积也更小
NOR Flash和NAND FLASH的擦除都是按块进行的,执行一个擦除或者写入操作时,NOR Flash大约需要5s,而NAND FLASH通常不超过4ms
6.启动流程分析
上电之后,系统会取执行ROM或者Flash里面的Bootloader启动代码,启动代码用来在初始化电路以及用来为高级语言编写的软件做好运行前准备的一小段汇编语言。商业实时操作系统中,启动代码部分一般叫板级支持包(BSP)。Bootloader启动具体流程如下:
1.第一步设置中断和异常向量
2.完成处理器芯片一些寄存器的系统启动的最初配置
3.设置看门狗
4.配置系统存储器,包括Flash、SRAM、和DRAM等,并为它们分配地址空间
5.为处理器的每个工作模式设置栈指针,ARM处理器有多种工作模式,每种工作模式都需要设置单独的占空间
6.变量初始化,软件中已经赋值的全局变量,启动过程把这部分变量从只读区域复制到读写区域,已经赋值的静态全局变量直接固化在只读Flash或EEPROM中
7.数据区准备,软件所有未赋值的全局变量,启动过程中需要把这部分变量所在区域清零
8.调用高级语言入口,比如main函数