没有合适的资源?快使用搜索试试~ 我知道了~
首页uboot概述,从bootloader讲起
uboot概述,从bootloader讲起
5星 · 超过95%的资源 需积分: 47 17 下载量 151 浏览量
更新于2023-06-28
评论 1
收藏 295KB PDF 举报
讲述uboot的文档,从bootloader讲起,之后详细讲解uboot
资源详情
资源评论
资源推荐
6.1 Bootloader
对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式 Linux 系统同
样离不开引导程序,这个引导程序就叫作 Bootloader。
6.1.1 Bootloader 介绍
Bootloader 是在操作系统运行之前执行的一段小程序。通过这段小程序,我们
可以初始化硬件设备、建立内存空间的映射表,从而建立适当的系统软硬件环境,
为最终调用操作系统内核做好准备。
对于嵌入式系统,Bootloader 是基于特定硬件平台来实现的。因此,几乎不可
能为所有的嵌入式系统建立一个通用的 Bootloader,不同的处理器架构都有不
同的 Bootloader。Bootloader 不但依赖于 CPU 的体系结构,而且依赖于嵌入式
系统板级设备的配置。对于 2 块不同的嵌入式板而言,即使它们使用同一种处理
器,要想让运行在一块板子上的 Bootloader 程序也能运行在另一块板子上,一
般也都需要修改 Bootloader 的源程序。
反过来,大部分 Bootloader 仍然具有很多共性,某些 Bootloader 也能够支持多
种体系结构的嵌入式系统。例如,U-Boot 就同时支持 PowerPC、ARM、MIPS 和 X86
等体系结构,支持的板子有上百种。通常,它们都能够自动从存储介质上启动,
都能够引导操作系统启动,并且大部分都可以支持串口和以太网接口。
本章将对各种 Bootloader 总结分类,分析它们的共同特点。以 U-Boot 为例,详
细讨论 Bootloader 的设计与实现。
6.1.2 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.网络启动方式
这种方式开发板不需要配置较大的存储介质,跟无盘工作站有点类似。但是使用
这种启动方式之前,需要把 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
Environment)功能就是网络启动方式;U-Boot 也支持网络启动功能。
2.磁盘启动方式
传统的 Linux 系统运行在台式机或者服务器上,这些计算机一般都使用 BIOS 引
导,并且使用磁盘作为存储介质。如果进入 BIOS 设置菜单,可以探测处理器、
内存、硬盘等设备,可以设置 BIOS 从软盘、光盘或者某块硬盘启动。也就是说,
BIOS 并不直接引导操作系统。那么在硬盘的主引导区,还需要一个 Bootloader。
这个 Bootloader 可以从磁盘文件系统中把操作系统引导起来。
Linux 传统上是通过 LILO(LInux LOader)引导的,后来又出现了 GNU 的软件
GRUB(GRand 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.Flash 启动方式
大多数嵌入式系统上都使用 Flash 存储介质。Flash 有很多类型,包括 NOR Flash、
NAND Flash 和其他半导体盘。其中,NOR Flash(也就是线性 Flash)使用最为
普遍。
NOR Flash 可以支持随机访问,所以代码是可以直接在 Flash 上执行的。
Bootloader 一般是存储在 Flash 芯片上的。另外,Linux 内核映像和 RAMDISK
也可以存储在 Flash 上。通常需要把 Flash 分区使用,每个区的大小应该是 Flash
擦除块大小的整数倍。图 6.2 是 Bootloader 和内核映像以及文件系统的分区表。
图 6.2 Flash 存储示意图
Bootloader 一般放在 Flash 的底端或者顶端,这要根据处理器的复位向量设置。
要使 Bootloader 的入口位于处理器上电执行第一条指令的位置。
接下来分配参数区,这里可以作为 Bootloader 的参数保存区域。
再下来内核映像区。Bootloader 引导 Linux 内核,就是要从这个地方把内核映
像解压到 RAM 中去,然后跳转到内核映像入口执行。
然后是文件系统区。如果使用 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 Bootloader 的种类
嵌入式系统世界已经有各种各样的 Bootloader,种类划分也有多种方式。除了
按照处理器体系结构不同划分以外,还有功能复杂程度的不同。
首先区分一下“Bootloader”和“Monitor”的概念。严格来说,“Bootloader”
只是引导设备并且执行主程序的固件;而“Monitor”还提供了更多的命令行接
口,可以进行调试、读写内存、烧写 Flash、配置环境变量等。“Monitor”在
嵌入式系统开发过程中可以提供很好的调试功能,开发完成以后,就完全设置成
了一个“Bootloader”。所以,习惯上大家把它们统称为 Bootloader。
表 6.1 列出了 Linux 的开放源码引导程序及其支持的体系结构。表中给出了 X86
ARM PowerPC 体系结构的常用引导程序,并且注明了每一种引导程序是不是
“Monitor”。
表 6.1 开放源码的 Linux 引导程
序
Bootloader Monitor 描 述 x86 ARM PowerPC
LILO 否 Linux 磁盘引导程序 是 否 否
GRUB 否 GNU 的 LILO 替代程序 是 否 否
Loadlin 否 从 DOS 引导 Linux 是 否 否
ROLO 否 从 ROM 引导 Linux 而不需要 BIOS 是 否 否
Etherboot 否 通过以太网卡启动 Linux 系统的固件 是 否 否
LinuxBIOS 否 完全替代 BUIS 的 Linux 引导程序 是 否 否
BLOB 否 LART 等硬件平台的引导程序 否 是 否
U-boot 是 通用引导程序 是 是 是
RedBoot 是 基于 eCos 的引导程序 是 是 是
对于每种体系结构,都有一系列开放源码 Bootloader 可以选用。
(1)X86
X86 的工作站和服务器上一般使用 LILO 和 GRUB。LILO 是 Linux 发行版主流的
Bootloader。不过 Redhat Linux 发行版已经使用了 GRUB,GRUB 比 LILO 有更有
好的显示界面,使用配置也更加灵活方便。
在某些 X86 嵌入式单板机或者特殊设备上,会采用其他 Bootloader,例如:ROLO。
这些 Bootloader 可以取代 BIOS 的功能,能够从 FLASH 中直接引导 Linux 启动。
现在 ROLO 支持的开发板已经并入 U-Boot,所以 U-Boot 也可以支持 X86 平台。
(2)ARM
ARM 处理器的芯片商很多,所以每种芯片的开发板都有自己的 Bootloader。结果 ARM
bootloader 也变得多种多样。最早有为 ARM720 处理器的开发板的固件,又有了
armboot,StrongARM 平台的 blob,还有 S3C2410 处理器开发板上的 vivi 等。现在
armboot 已经并入了 U-Boot,所以 U-Boot 也支持 ARM/XSCALE 平台。U-Boot 已经成
为 ARM 平台事实上的标准 Bootloader。
(3)PowerPC
PowerPC 平台的处理器有标准的 Bootloader,就是 ppcboot。PPCBOOT 在合并
armboot 等之后,创建了 U-Boot,成为各种体系结构开发板的通用引导程序。
U-Boot 仍然是 PowerPC 平台的主要 Bootloader。
(4)MIPS
MIPS 公司开发的 YAMON 是标准的 Bootloader,也有许多 MIPS 芯片商为自己的开
发板写了 Bootloader。现在,U-Boot 也已经支持 MIPS 平台。
(5)SH
剩余43页未读,继续阅读
chenqb1216
- 粉丝: 0
- 资源: 7
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论5