第10章BootLoader.ppt

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第10章BootLoader

第十章 Boot Loader Boot Loader的主要运行任务就是将内核映象从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。 而在嵌入式系统中,通常并没有像 BIOS 那样的固件程序,因此整个系统的加载启动任务就完全由Boot Loader来完成。比如在一个基于 ARM9 TDMI core 的嵌入式系统中,系统在上电或复位时通常都从地址0开始执行,而在这个地址处安排的通常就是系统的Boot Loader程序。 10.1 Boot Loader的概念 Boot Loader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。 10.1.1 Boot Loader所支持的嵌入式体系 每种不同的CPU体系结构都有不同的Boot Loader,通常Boot Loader与CPU之间是一对一的关系。但是,有些Boot Loader也支持多种体系结构的CPU,比如U-Boot就同时支持ARM体系结构和MIPS体系结构。 除了依赖于CPU的体系结构外,Boot Loader实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块具有不同板载设备的嵌入式系统而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的Boot Loader程序也能运行在另一块板子上,通常也都需要修改Boot Loader的源程序中关于板载设备驱动等内容。 10.1.2 Boot Loader的安装位置 通常总是将Boot Loader安装在嵌入式系统的存储设备的最前端,如图10-2所示。 上图为一个同时装有Boot Loader、内核启动参数、内核映像和根文件系统映像的固态存储设备的空间划分。 10.1.3 Boot Loader的启动过程 从固态存储设备上启动的Boot Loader大多都是2阶段的启动过程,也即启动过程可以分为stage 1和stage 2两部分。在stage1阶段,通常将完成以下工作(以执行的先后顺序): 硬件设备初始化,通常只初始化最基本的设备,如内存控制器、串口等设备; 为加载Boot Loader的stage2准备内存空间; 拷贝Boot Loader的stage2到内存空间中; 设置堆栈; 跳转至stage2的入口点。 Boot Loader的stage2通常包括以下步骤: 初始化本阶段要使用到的硬件设备,如以太网、USB等; 检测系统内存映射; 将内核映像和根文件系统映像从固体存储器Flash等上,读到内存空间中; 设置内核启动参数; 启动内核。 10.1.4 Boot Loader与主机的通信 目标机上的Boot Loader一般通过串口与主机之间进行命令、文件、消息等的传输,传输协议通常是 xmodem、ymodem、zmodem等协议。但是,串口传输的速度是十分有限的,不适合传输较大的文件,如Ramdisk等。因此通过以太网连接并借助 TFTP 协议来下载文件是个更好的选择。如U-BOOT等Boot Loader都支持使用以太网实现与主机的通信。 10.1.5 Boot Loader的操作模式 大多数Boot Loader都包含两种不同的操作模式:“启动加载”模式和“下载”模式。从最终用户的角度看,Boot Loader的作用就是用来加载操作系统,而并不存在所谓的启动加载模 10.2 Boot Loader 的基本结构 在本节的讨论中,都是假定内核映像与根文件系统映像都被加载到RAM中运行。之所以提出这样一个假设前提是因为,在嵌入式系统中内核映像与根文件系统映像也可以直接在ROM或Flash这样的固态存储设备中直接运行。但这种作法无疑是以运行速度的牺牲为代价的。从操作系统的角度看,Boot Loader的最终目标就是正确地调用内核,为此它需要完成以下任务: 设计程序入口指针; 建立异常中断处理向量; 初始化CPU各种模式的堆栈和寄存器; 初始化系统中要使用的各种片内外设备; 初始化目标板; 引导操作系统。 下面以2阶段的Boot Loader的启动过程为例,讨论Boot loader的实现过程。 10.2.1 Boot Loader的stage1 在stage1中Boot Loader主要完成5个方面的工作,依次为: 1.基本的硬件初始化 2.为加载stage2准备内存空间 3.拷贝stage2到内存空间中 4.设置堆栈指针sp 5.跳转到stage2的入口点 10.2.2 Boot Loader的stage2 正如前面所说,stage2的代码通常用C语言来实现,以便于实现更复杂的功能和取得更好的代码

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档