没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
嵌入式 Linux
Linux
Linux
Linux
系统开发技术详解 -
-
-
-
基于 ARM
ARM
ARM
ARM
6.1
6.1
6.1
6.1
Bootloader
Bootloader
Bootloader
Bootloader
对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式 L
inux 系统同样离不开引导程序,这个引导程序就叫作 Bootloader 。
6.1.1
6.1.1
6.1.1
6.1.1
Bootloader
Bootloader
Bootloader
Bootloader
介绍
Bootloader 是在操作系统运行之前执行的一段小程序。通过这段小程序,我们
可以初始化硬件设备、 建立内存空间的映射表, 从而建立适当的系统软硬件环
境,
为最终调用操作系统内核做好准备。
对于嵌入式系统, Bootloader 是基于特定硬件平台来实现的。因此,几乎不可
能为所有的嵌入式系统建立一个通用的 Bootloader ,不同的处理器架构都有不
同的 Bootloader 。 Bootloader 不但依赖于 CPU 的体系结构,而且依赖于嵌入式
系统板级设备的配置。 对于 2 块不同的嵌入式板而言, 即使它们使用同一种处 理
器,要想让运行在一块板子上的 Bootloader 程序也能运行在另一块板子上,一
般也都需要修改 Bootloader 的源程序。
反过来, 大部分 Bootloader 仍然具有很多共性, 某些 Bootloader 也能够支持 多
种体系结构的嵌入式系统。例如, U-Boot 就同时支持 PowerPC
、
ARM
、
MIPS 和 X 8
6 等体系结构, 支持的板子有上百种。 通常, 它们都能够自动从存储介质上启
动,
都能够引导操作系统启动,并且大部分都可以支持串口和以太网接口。
本章将对各种 Bootloader 总结分类,分析它们的共同特点。 以 U-Boot 为例, 详
细讨论 Bootloader 的设计与实现。
6.1.2
6.1.2
6.1.2
6.1.2
Bootloader
Bootloader
Bootloader
Bootloader
的启动
Linux 系统是通过 Bootloader 引导启动的。一上电,就要执行 Bootloader 来初始化系统。可
以通过第 4 章的 Linux 启动过程框图回顾一下。
系统加电或复位后, 所有 CPU 都会从某个地址开始执行, 这是由处理器设计决定的。 比如
,
X86 的复位向量在高地址端, ARM 处理器在复位时从地址 0x00000000 取第一条指令。 嵌 入
式系统的开发板都要把板上 ROM 或 Flash 映射到这个地址。因此,必须把 Bootloader 程序
存储在相应的 Flash 位置。系统加电后, CPU 将首先执行它。
主机和目标机之间一般有串口可以连接, Bootloader 软件通常会通过串口来输入输出。 例
如:
输出出错或者执行结果信息到串口终端,从串口终端读取用户控制命令等。
Bootloader 启动过程通常是多阶段的,这样既能提供复杂的功能,又有很好的可移植性。 例
如:从 Flash 启动的 Bootloader 多数是两阶段的启动过程。从后面 U-Boot 的内容可以详细
分析这个特性。
大多数 Bootloader 都包含 2 种不同的操作模式:本地加载模式和远程下载模式。这 2 种 操
作模式的区别仅对于开发人员才有意义,也就是不同启动方式的使用。从最终用户的角 度
看, Bootloader 的作用就是用来加载操作系统,而并不存在所谓的本地加载模式与远程下
载模式的区别。
因为 Bootloader 的主要功能是引导操作系统启动, 所以我们详细讨论一下各种启动方式的 特
点。
1
1
1
1
.网络启动方式
.网络启动方式
.网络启动方式
.网络启动方式
这种方式开发板不需要配置较大的存储介质, 跟无盘工作站有点类似。 但是使用这种启动 方
式之前,需要把 Bootloader 安装到板上的 EPROM 或者 Flash 中。 Bootloader 通过以太网接
口远程下载 Linux 内核映像或者文件系统。 第 4 章介绍的交叉开发环境就是以网络启动方 式
建立的。这种方式对于嵌入式系统开发来说非常重要。
使用这种方式也有前提条件, 就是目标板有串口、 以太网接口或者其他连接方式。 串口一 般
可以作为控制台,同时可以用来下载内核影像和 RAMDISK 文件系统。串口通信传输速率
过低,不适合用来挂接 NFS 文件系统。所以以太网接口成为通用的互连设备,一般的开发
板都可以配置 10M 以太网接口。
对于 PDA 等手持设备来说,以太网的 RJ-45 接口显得大了些,而 USB 接口,特别是 USB
的迷你接口,尺寸非常小。对于开发的嵌入式系统,可以把 USB 接口虚拟成以太网接口来
通讯。这种方式在开发主机和开发板两端都需要驱动程序。
另外,还要在服务器上配置启动相关网络服务。 Bootloader 下载文件一般都使用 TFTP 网络
协议,还可以通过 DHCP 的方式动态配置 IP 地址。
DHCP/BOOTP 服务为 Bootloader 分配 IP 地址, 配置网络参数, 然后才能够支持网络传输 功
能。如果 Bootloader 可以直接设置网络参数,就可以不使用 DHCP 。
TFTP 服务为 Bootloader 客户端提供文件下载功能,把内核映像和其他文件放在 /tftpboot 目
录下。这样 Bootloader 可以通过简单的 TFTP 协议远程下载内核映像到内存。如图 6.1
所示。
图 6.1 网络启动示意图
大部分引导程序都能够支持网络启动方式。 例如: BIOS 的
PXE
( Preboot Execution Environ m
ent )功能就是网络启动方式; U-Boot 也支持网络启动功能。
2
2
2
2
.磁盘启动方式
.磁盘启动方式
.磁盘启动方式
.磁盘启动方式
传统的 Linux 系统运行在台式机或者服务器上,这些计算机一般都使用 BIOS 引导,并且 使
用磁盘作为存储介质。如果进入 BIOS 设置菜单,可以探测处理器、内存、硬盘等设备, 可
以设置 BIOS 从软盘、光盘或者某块硬盘启动。也就是说, BIOS 并不直接引导操作系统。
那么在硬盘的主引导区,还需要一个 Bootloader 。这个 Bootloader 可以从磁盘文件系统中 把
操作系统引导起来。
Linux 传统上是通过 LILO ( LInux LOader )引导的, 后来又出现了 GNU 的软件 GRUB ( G R
and Unified Bootloader
) 。这
2 种 Bootloader 广泛应用在 X86 的 Linux 系统上。 你的开发主 机
可能就使用了其中一种,熟悉它们有助于配置多种系统引导功能。
LILO 软件工程是由 Werner Almesberger 创建, 专门为引导 Linux 开发的。 现在 LILO 的维 护
者是 John Coffman ,最新版本下载站点: http://lilo.go.dyndns.org 。 LILO 有详细的文档,例
如 LILO 套件中附带使用手册和参考手册。此外,还可以在 LDP 的 “ LILO mini-HOWTO
”
中找到 LILO 的使用指南。
GRUB 是 GNU 计划的主要 bootloader 。 GRUB 最初是由 Erich Boleyn 为 GNU Mach 操作系
统撰写的引导程序。后来有 Gordon Matzigkeit 和 Okuji Yoshinori 接替 Erich 的工作,继续 维
护和开发 GRUB 。 GRUB 的网站 http://www.gnu.org/software/grub/ 上有对套件使用的说明文
件,叫作《 GRUB manual
》 。
GRUB 能够使用 TFTP 和 BOOTP 或者 DHCP
通过网络启动,
这种功能对于系统开发过程很有用。
除了传统的 Linux 系统上的引导程序以外, 还有其他一些引导程序, 也可以支持磁盘引导 启
动。例如: LoadLin 可以从 DOS 下启动 Linux ;还有 ROLO 、 LinuxBIOS , U-Boot 也支持 这
种功能。
3
3
3
3
.
.
.
.
Flash
Flash
Flash
Flash
启动方式
启动方式
启动方式
启动方式
大多数嵌入式系统上都使用 Flash 存储介质。 Flash 有很多类型,包括 NOR Flash 、 NAND F
lash 和其他半导体盘。其中, NOR Flash (也就是线性 Flash )使用最为普遍。
NOR Flash 可以支持随机访问,所以代码是可以直接在 Flash 上执行的。 Bootloader 一般是
存储在 Flash 芯片上的。另外, Linux 内核映像和 RAMDISK 也可以存储在 Flash 上。通常
需要把 Flash 分区使用, 每个区的大小应该是 Flash 擦除块大小的整数倍。 图 6.2 是 Bootloa d
er 和内核映像以及文件系统的分区表。
图 6.2 Flash 存储示意图
Bootloader 一般放在 Flash 的底端或者顶端, 这要根据处理器的复位向量设置。要使 Bootlo a
der 的入口位于处理器上电执行第一条指令的位置。
接下来分配参数区,这里可以作为 Bootloader 的参数保存区域。
再下来内核映像区。 Bootloader 引导 Linux 内核, 就是要从这个地方把内核映像解压到 RA M
中去,然后跳转到内核映像入口执行。
然后是文件系统区。如果使用 Ramdisk 文件系统,则需要 Bootloader 把它解压到 RAM 中。如
果使用 JFFS2 文件系统,将直接挂接为根文件系统。这两种文件系统将在第 12 章详细讲解。
最后还可以分出一些数据区,这要根据实际需要和 Flash 大小来考虑了。
这些分区是开发者定义的, Bootloader 一般直接读写对应的偏移地址。 到了 Linux 内核空
间,
可以配置成 MTD 设备来访问 Flash 分区。但是,有的 Bootloader 也支持分区的功能,例如
:
Redboot 可以创建 Flash 分区表,并且内核 MTD 驱动可以解析出 redboot 的分区表。
除了 NOR Flash ,还有 NAND Flash 、 Compact Flash 、 DiskOnChip 等。这些 Flash 具有芯片
价格低,存储容量大的特点。但是这些芯片一般通过专用控制器的 I/O 方式来访问,不能 随
机访问, 因此引导方式跟 NOR Flash 也不同。 在这些芯片上, 需要配置专用的引导程序。 通
常,这种引导程序起始的一段代码就把整个引导程序复制到 RAM 中运行,从而实现自举 启
动,这跟从磁盘上启动有些相似。
6.1.3
6.1.3
6.1.3
6.1.3
Bootloader
Bootloader
Bootloader
Bootloader
的种类
嵌入式系统世界已经有各种各样的 Bootloader ,种类划分也有多种方式。除了
按照处理器体系结构不同划分以外,还有功能复杂程度的不同。
首先区分一下 “ Bootloader ” 和 “ Monitor ” 的概念。严格来说, “ Bootloader
”
只是引导设备并且执行主程序的固件;而 “ Monitor ” 还提供了更多的命令行接
口,可以进行调试、读写内存、烧写 Flash 、配置环境变量等。 “ Monitor ” 在
嵌入式系统开发过程中可以提供很好的调试功能, 开发完成以后, 就完全设置 成
了一个 “ Bootloader ” 。所以,习惯上大家把它们统称为 Bootloader 。
表 6.1 列出了 Linux 的开放源码引导程序及其支持的体系结构。 表中给出了 X8 6
ARM PowerPC 体系结构的常用引导程序,并且注明了每一种引导程序是不是 “ M
onitor ” 。
表 6.1 开放源码的 Linux 引导程序
Bootloader
Monitor
描 述
x86
ARM
PowerPC
LILO
否
Linux 磁盘引导程序
是
否
否
GRUB
否
GNU 的 LILO 替代程序
是
否
否
Loadlin
否
从 DOS 引导 Linux
是
否
否
ROLO
否
从 ROM 引导 Linux 而不需要 BIOS
是
否
否
剩余48页未读,继续阅读
资源评论
delta0001
- 粉丝: 6
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功