Bootloader 设计分析 3
1 Bootloader 的操作模式 (Operation Mode) 大多数 Bootloader 都包含两种不同的操作模式[2]: (1)
启动加载(Boot loading)模式:也称为“自主”模式
即Bootloader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入
下载(Downloading) 模式:在这种模式下,目标机上的Bootloader 将通过串口或网络连接等通信手段从主机( Host) 下载内核映像和根文件系统映像等,然后保存到目标机上的FLASH 类固态存储设备中
Bootloader 的这种模式通常在系统初次安装和更新时被使用,工作于这种模式下的Bootloader 通常都会向它的终端用户提供一个简单的命令行接口
在我们的Bootloader 设计中我们同时支持这两种工作模式,采用的方法是:一开始启动时处于正常的启动加载模式,但并不立即启动进入uClinux 内核,而是提示延时5 秒,等待终端用户如果按下某一特定按键,则切换到下载模式,否则继续启动uCLinux 内核
2 Bootloader 的启动及初始化 基于ARM 的芯片多数为复杂的片上系统(SoC),这类复杂系统里的多数硬件模块都是可配置的[3]
因此大多数 Bootloader 都分为 stage1 和 stage2 两大部分
依赖于 CPU 体系结构的代码,通常都放在 stage1 中,而且在这一部分,我们直接对处理器内核和硬件控制器进行编程,因此常常都用汇编语言来实现
而stage2 则通常用C 语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性
1 Bootloader 的 stage1 这部分代码必须首先完成一些基本的硬件初始化,为stage2