Chinaunix首页 | 论坛 | 博客
  • 博客访问: 284332
  • 博文数量: 54
  • 博客积分: 2756
  • 博客等级: 少校
  • 技术积分: 677
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-16 22:51
文章分类

全部博文(54)

文章存档

2011年(30)

2010年(22)

2009年(2)

我的朋友

分类: 嵌入式

2010-01-04 20:57:38

BootLoader

1.BootLoader 的介绍

引导加载程序BootLoader 是系统加电后运行的第一段代码。我们熟悉的PC 中的引导程序一般由BIOS 和位于硬盘MBR中的OS bootloader(例如LILO 或者GRUB)一起组成。然而在嵌入式系统中通常没有像BIOS 那样的固件程序(有的嵌入式CPU 有),因此整个系统的加载启动任务就完全由bootloader 来完成。比如在一个基于ARM920T core 的嵌入式系统中,系统在上电或复位时都从地址0x00000000 开始执行,而在这个地址处安排的通常就是系统的BootLoader 程序。

简单地说,BootLoader 就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。

bootloader 是依赖于硬件而实现的,特别是在嵌入式系统中。不同的体系结构需求的bootloader 是不同的;除了体系结构,bootloader 还依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式板而言,即使它们基于相同的CPU 构建,运行在其中一块电路板上的bootloader,未必能够运行在另一块电路开发板上。

Bootloader 的启动过程可以是单阶段的,也可以是多阶段的。通常多阶段的bootloader能提供更为复杂的功能,以及更好的可移植性。从固态存储设备上启动的bootloader 大多数是二阶段的启动过程,也即启动过程可以分为stage 1 和stage 2 两部分。

2.BootLoader 操作模式

大多数bootloader 都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这种区别对于开发人员才有意义。但从最终用户的角度看,bootloader 的作用永远就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。

启动加载模式:这种模式也称为“自主”模式,即bootloader 从目标机上的某个固体存储设备上将操作系统加载到RAM 中运行,整个过程没有用户的介入。这种模式是bootloader的正常工作模式,因此当以嵌入式产品发布的时候,bootloader 必须工作在这种模式下。

下载模式:在这种模式下,目标机上的bootloader 将通过串口或者网络连接或者其它通信手段从主机下载文件,比如:下载内核镜像和根文件系统镜像等。从主机下载的文件通常首先被bootloader 保存到目标机的RAM 中,然后被bootloader 写到目标机上的FLASH 类固态存储设备中。Bootloader 的这种模式通常在第一次安装内核与根文件系统时使用;此外,以后的系统更新也会使用bootloader 的这种工作模式。工作于这种模式下的bootloader 通常都会向它的中断用户提供一个简单的命令行接口。

 

3.bootloader 的功能说明和结构框架

1)结构框架

在设计时,我们将booloader 分为两个阶段:阶段1 (stage 1) 和阶段2 (stage 2):

阶段1:用主要用汇编语言,它主要进行与CPU 核以及存储设备密切相关的处理工作,进行一些必要的初始化工作,是一些依赖于CPU 体系结构的代码,为了增加效率以及因为涉及到协处理器的设置,只能用汇编编写,这部分直接在FLASH 中执行;

阶段2:一般用C 语言来实现一般的流程以及对板级的一些驱动支持,这部分会被拷贝到RAM 中执行。这样设计的话,代码具有更好的可读性与移植性:若对于相同的CPU 以及存储设备,要增加外设支持,阶段1 的代码可以维护不变,只对阶段2 的代码进行修改;若要支持不同的CPU,则基础代码只需在阶段1 中修改。

bootloader 的阶段一(stage1)通常包括下面的步骤(以执行的先后顺序):

(1) 一些基本硬件的初始化工作

(2) 为加载镜像2 准备RAM 空间(RAM 足够的情况下可以省略)

(3) 把镜像2 拷贝到RAM 空间

(4) 跳转到镜像2 的入口点(一般是C 入口点)

bootloader 的阶段二(stage2)通常包括下面的步骤(以执行的先后顺序):

(1) 继续初始化相关硬件和相关功能性函数

(2) 进入命令行模式,等待功能性命令的输入来执行相应的功能,比如网络下载,启动操作系统内核。

阅读(2080) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~