To be a better coder
分类: LINUX
2019-03-15 14:27:30
1. Boot Loader的概念
BootLoader就是在操作系统内核运行前之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件带到一个合适的状态,以便为最终
调用操作系统内核准备好正确的环境。
1.BootLoader 的安装媒介
系统加电或者复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址取指令。比如,基于ARM7TDMI core 的CPU在复位时通常从地址0x00000000取它的第一条指令。而基于CPU构建的嵌入式系统通常都在某种类型的固态设备(比如ROM、EEPROM、FLASH)被映射到这个预先安排的地址上。因此在系统加电后,CPU将首先执行BootLoader程序。
下图就是一个同时装有BootLoader、内核启动参数、内核映像和根文件系统映像的固态设备的典型空间分配结构图
2.用来控制BootLoader的设备和机制
主机和目标机之间一般通过串口来建立连接,BootLoader执行时通过串口进行I/O,比如:输出打印信息、从串口读取控制字符
3.BootLoader的启动过程是单阶段还是多阶段
通常多阶段的BootLoader能提供更复杂的功能和更好的移植性能。从固态设备上启动的BootLoader大多数是2阶段的。
4.BootLoader的操作模式
包含2中操作模式:启动加载模式和下载模式
启动加载模式(boot loading):BootLoader从目标机上的某个固态设备上将操作系统加载到RAM中运行
下载模式(downloading):目标机上的BootLoader将通过串口连接或者网络连接等通信手段从主机上下载文件,比如:下载内核映像和根文件系统映像。从主机下 载的文件通常先被BootLoader保存到RAM中再写到固态设备中。
5.BootLoader与主机之间进行文件传输所用的通信设备以及协议
最通常的情况是,目标机上的BootLoader通过串口和主机进行文件传输,传输协议通常是 xmodem/ymodem/zmodem中的一种。
通过以太网体积TFTP协议来下载,主机方必须也需要软件来提供TFTP服务。
2.BootLoader主要任务和典型框架
从操作系统的角度看,BootLoader的目的就是正确调用内核来执行。另外,由于BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为 stage1和stage2两部分。依赖于CPU的体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而stage2通常用C语言来实现,这样可以实现复杂的功能,而且代码具有更好的可读性和可移植性。
1.BootLoader的stage1通常包括以下执行步骤
.硬件初始化
。为BootLoader的stage2准备RAM空间
。拷贝BootLoader的stage2到RAM空间中
。设置好堆栈
。跳转到stage2的C入口点
2.BootLoader的stage2通常包括以下执行步骤
。初始化本阶段需要使用到的设备硬件
。检测系统内存映射(memory map)
。将kernel 映像和根文件系统映像从flash上读到RAM
。为内核设置启动参数
。调用内核