Bootloader程序

Bootloader是在操作系统运行前的初始化程序,负责硬件设备初始化、内存映射,并为加载系统内核做好准备。它依赖于CPU体系结构和开发板,通常分为单阶段和多阶段,有启动加载和下载两种模式。启动流程包括stage1和stage2,前者负责基本硬件初始化和拷贝stage2到RAM,后者执行复杂功能并加载内核。

1.概念

简单的说,Bootloader就是在操作系统运行之前运行的一程序,它类似于PC中的BIOS程序。通过这段程序,可以完成硬件设备的初始化,并建立内存空间的映射图功能,从而将系统的软硬件环境带到一个合适的状态,为最终调用系统内核做好准备。

通常,Bootloader是严重依赖硬件的,特别是在嵌入式当中。因此,在嵌入式中建立一个通用的Bootloader是几乎不可能的事情。但是还是可以对Bootloader归纳出一些通用的概念来进行学习。

  (1).Bootloader所支持的CPU和嵌入式开发板

每种不同的CPU体系结构都有不同的Bootloader。有些Bootloader也支持多种体系结构的CPU,比如U-Boot就同时支持ARM和MIPS结构体系。除了依赖于CPU的体系结构外,Bootloader实际上也依赖于实际的嵌入式开发板设备的配置。

  (2).Bootloader的安装媒介

系统加电或复位后,所有的CPU都会从某个由CPU制造厂商预先安排的地址上取指令。而基于CPU构建的嵌入式系统都有某种类型的固态存储设备(如ROM,EEPROM,或FLASH等)被映射到这个预先安排的地址上,因此在系统加电后,CPU将首先执行Bootloader程序。

  (3).Bootloader的启动过程分为单阶段和多阶段,通常多阶段的Bootloader能提供更为复杂的功能,以及更好的可移植性。

  (4).Bootloader的操作模式。大多数的Bootloader都有两种不同的操作模式,分别是“启动加载”模式和“下载”模式,这种区别仅对于开发人员才有意义。

a.启动加载模式,这种模式也成为“自主”模式,也就是Bootloader从目标机上的固态存储设备上将操作系统加载到RAM中运行,整个过程没有用户的介入。这也是很多嵌入式产品发布时的通用模式

b.下载模式,在这种模式中目标机上的Bootloader会通过串口或者网络连接手段从主机上下载文件,如将内核映像和文件系统下载到目标机的RAM中,然后再由Bootloader将文件拷贝到flash中。这种模式是在系统更新时使用,工作于这种模式下的Bootloader都会向用户提供一个简单的命令行接口。

  (5).Bootloader与主机之间的进行文件传输时所用的通信设备以及协议

分为两种情况,一.目标机使用串口与主机相连。这时的传输协议通常是xmodem/ymodem/zmodem中的一种。但是串口的速度实在有限,所以还可以用网络连接的方式传输文件,这时使用的协议多为tftp。

2.Bootloader的启动流程

Bootloader的启动流程一般分为两个阶段:stage1和stage2

  (1).stage1

stage1主要完成以下工作

基本硬件的初始化,包括屏蔽所有的中断,设置CPU的速度和时钟频率,RAM初始化。初始化LED,关闭CPU内部指令和数据的cache等

为加载stage2到RAM中做准备,通常为了获得更快的速度将stage2加载到RAM中来运行,因此必须为加载Bootloader的stage2准备好一段可用的RAM空间范围

拷贝stage2到RAM中。在这要确定两点:1).stage2的可执行印像在固态存储设备的存放存放起始和终止地址  2).RAM里面的起始地址

设置堆栈指针,这时为了执行stage2的C语言代码做好准备。

(2).stage2

用汇编语言跳转到main函数入口,由于stage2的代码通常由C语言实现,目的是实现更复杂的功能和取得更好的代码可读性和可移植性。但是与普通的C语言应用程序不同的是在编译连接时不能使用glibc库中的函数。

初始化本阶段要使用的硬件设备,包括初始化串口,初始化计时器等,在初始化这些设备之前,可以输出一些信息。

检测系统的内存映射

加载内核印象和根文件系统

设置内核启动参数













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值