- 1、本文档共44页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
bootloader
BootLoader的特点宿主主机和目标机之间一般通过串口连接,BootLoader软件在执行时通常会通过串口来进行I/O操作,例如:输出打印信息到串口,从串口读取用户控制字符等。不存在通用的BootLoader,但是存在设计BootLoader的通用的概念和规则,以指导用户对特定的BootLoader进行设计与实现。BootLoader的实现高度依赖于硬件,包括处理器的体系结构、具体型号、硬件电路板的设计。
BootLoader的启动过程BootLoader分为单阶段和多阶段两类多阶段的BootLoader能提供更为复杂的功能,以及更好的移植性。从固态存储器上启动的BootLoader大多是两阶段的启动过程。具体分为stage1和stage2。
BootLoader的操作模式大多BootLoader都有两个操作模式:启动加载(正常使用):即BootLoader从目标机上的某个固态存储器上将操作系统加载到ram中运行,整个过程没有用户的介入。这是BootLoader的正常工作模式。下载模式(开发人员用):目标机上的BootLoader将通过串口或网络连接从主机(host)上下载文件,例如内核映象和根文件系统等。下载的文件首先放在ram中,然后被BootLoader写到固态存储器中。BootLoader的这种模式通常在第一次安装内核与根文件系统时使用。
重点BootLoader介绍LILO:LInuxLOader,linux草创时期提出的BootLoader,现在由JohnCoffman维护,有详细的文档。在lilo.go.dyndns.org可以获得最新版本。GRUB:GRandUnifiedBootLoader,是GNU计划的主要BootLoader。blob:LART硬件计划采用的BootLoader。因为它的采用,blob被移植到许多使用arm的系统,使用非常广泛。blob不提供监控程序的能力。U-Boot:公认的功能最多、最具弹性以及开发最积极的开放源码BootLoader,受到各种支持者的支持。U-Boot以PPCBoot和ARMBoot为基础,大约支持100种PPC电路和十几种ARM电路
重点BootLoader介绍(续)vivi是由mizi公司为ARM处理器系列设计的一个BootLoader,目前只支持使用串口和主机通信,所以必须使用一条串口电缆来连接目标板和主机。作用如下:把内核(kernel)从flash复制到RAM,然后启动它初始化硬件下载程序并写入flash(一般通过串口或者网口先把内核下载到RAM中,然后写入到flash)检测目标板(BootLoader会有一些简单的代码用以测试目标板硬件的好坏)
由于BootLoader的实现依赖于CPU的体系结构、目标板硬件电路设计,因此大多数BootLoader都分为两个阶段。依赖于CPU的代码,例如设备初始化等放在stage1中,这部分代码通常用汇编来编写,以达到短小精悍的目的。而stage2通常用C编写,以实现更复杂的功能,而且可以提高代码的可移植性。典型BootLoader框架
stage1-1:基本的硬件初始化这是BootLoader一开始就要执行的操作,其目的是为stage2和随后的kernel的执行准备好基本的硬件环境。具体包括:屏蔽所有中断:处理中断是OS和drivers的责任。设置CPU的速度和时钟频率。RAM初始化:包括设置系统和内存的控制寄存器。初始化LED:通过GPIO驱动led提供系统信息。
stage1-2:为加载stage2准备ram为了获得较快的执行速度,通常都把stage2加载到内存中运行,所以必须为stage2准备一块可用的ram空间。stage2通常是C代码,所以除了stage2本身的映象外,还需要为stage2准备一块堆栈空间。一般来说,把stage2安排到内存顶端的1M空间范围内。stage2_end=stage2_start+stage2_size
stage1-2:为加载stage2准备ram(续)如果通过了上述测试,为了得到一段干净的内存,也可以对整个内存空间进行清0操作必须确保所安排的地址范围是真正可读写的ram空间,所以要对这个地址范围进行测试:先保存内存页开始两个字节的内容向这两个字节写入0x55aa,再立刻读回比较,如不一致,说明这个内存页不是有效的ram。向这两个字节写入0xaa55,再立刻读回比较,如不一致,说明这个内存页不是有效的ram。恢复这两个字节最初的内容。
stage1-3:复制stage2到内存复制时要确定两点:stage2的可执行映象在固态存储设备的存放起始地址和终止地址。为stage
文档评论(0)