当前位置:
文档之家› 第七章 嵌入式Linux的BootLoader
第七章 嵌入式Linux的BootLoader
8
7.1.2 Bootloader 的启动
嵌入式Linux系统也是通过Bootloader引导启动的。 一上电,就要执行Bootloader来初始化系统。 系统加电或复位后,所有CPU都会从某个地址开始 执行,具体的地址值是由处理器设计决定的。
比如,基于 ARM7TDMI core 的 CPU 在复位时通常都 从地址 0x00000000 取它的第一条指令。而基于ARM 处理器构建的嵌入式系统通常都有某种类型的固态存储 设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这 个预先安排的地址上。因此在系统加电后,CPU将首先 执行Bootloader程序。
比如在一个基于ARM7TDMI core的嵌入式系统中, 系统在上电或复位时都从地址0x00000000开始执 行.而在这个地址处安排的通常就是系统的 BootLoader程序。
6
7.1.1 Bootloader 的概念
Bootloader的概念和功能
BootLoader是一段汇编代码,存放在MBR中,它 的主要作用就是将操作系统启动代码读入内存。 从功能上看,Bootloader就是在操作系统内核或用 户应用程序运行之前运行的一段小程序。通过这段 小程序可以初始化硬件设备、建立内存空间的映射 图,从而将系统的软硬件环境带到一个合适的状态, 以便为最终调用操作系统内核或用户应用程序准备 好正确的环境。
Bootloader 的种类
Bootloader Lilo Grub Loadlin ROLO Etherboot Linux BIOS Blob U-Boot Monitor 否 否 否 否 否 否 否 是 描述 Linux磁盘引导程序 GNU引导的Lilo替代程 序 从DOS引导Linux 从ROM引导Linux而不需 要BIOS 通过以太网卡启动Linux 引导程序 完全替代BUIS的Linux引 导程序 LART等硬件平台的引导 程序 通用引导程序 X86 是 是 是 是 是 是 否 是 ARM 否 否 否 否 否 否 是 是 PowerPC 否 否 否 否 否 否 否 是
16
7.1.2 Bootloader 的启动
Flash 启动方式
大多数嵌入式系统上都使用Flash存储介质,NOR Flash(线性Flash)使用最为普遍。 Bootloader一般放在Flash的底端或者顶端,这需要 根据处理器的复位向量来进行设置。 可以配置成MTD设备来访问Flash分区。
29
7.3.2 Bootloader 的使用
工作正常的时候,Bootloader处于加载模式或 者交换模式 如使用vivi的时候,其交互模式的界面是
30
Bootloader-举例
利用vivi升级内核
31
ห้องสมุดไป่ตู้
Bootloader-举例
利用vivi升级文件系统
32
作业
以U-Boot为代表总结BootLoader的工作原 理和使用方法,形成报告.
10
Bootloader-启动举例
11
Bootloader-启动举例
12
Bootloader-启动举例
13
7.1.2 Bootloader 的启动
网络启动方式
以太网连接 HOST BOOTP 内核映象 目标板文 件系统 TFTP NFS TARGET BIOS 启动内核
14
7.1.2 Bootloader 的启动
24
第七章 Agenda
7.1 Bootloader 简介 7.2 常用Bootloader 的介绍 7.3 Bootloader 的烧写和使用
25
7.3 Bootloader 的烧写和使用
7.3.1 Bootloader 的烧写 7.3.2 Bootloader 的使用
26
7.3.1 Bootloader 的烧写
27
Bootloader-举例
板子上没有任何东西(包括BootLoader)的时候, 需要专门的工具对vivi等BootLoader进行烧写
28
Bootloader-举例
板子上诸如vivi等BootLoader后,再进行升级,就可 以利用Target上已经存在的(旧的)BootLoader了
7
7.1.1 Bootloader 的概念
Bootlaoder的不统一性/不通用性
通常,BootLoader 是依赖于硬件而实现的,特别是在 嵌入式领域,为嵌入式系统建立一个通用的BootLoader 是很困难的。当然,我们可以归纳出一些通用的概念来, 以便我们了解特定BootLoader的设计与实现。当前在嵌 入式Linux系统中,有了一些流行和通用的Bootloader 框架。 现实开发中,我们都是采用现有的BootLoader进行修改 Vivi,blob,u-boot是最常见的,它们都是开源的 Vivi是三星公司的,我们的实验板子就是使用的它
15
7.1.2 Bootloader 的启动
磁盘启动方式
传统的Linux系统运行在台式机或者服务器上, 这些计算机一般都使用BIOS引导,并且使用磁 盘作为存储介质。 Linux传统上是通过Lilo(Linux Loader)引导 的,后来又出现了GNU的软件Grub(Grand Unified Bootloader)。这两种Bootloader广 泛应用在X86的Linux系统上。 在嵌入式系统领域应用的并不多。
22
7.2.2 U-Boot
U-Boot支持的处理器构架包括PowerPC , ARM , MIPS,x86 U-Boot的功能强大,涵盖了绝大部分处理器构架, 提供大量外设驱动,支持多个文件系统,附带调试、 脚本和引导等工具 U-boot可配置性非常强 ,它所支持的命令也可以通 过配置来增减。U-boot的命令主要包括以下几类: 信息类命令、环境变量类命令、存储器命令、 Flash专用命令、载类命令、启动类命令和Cache 类命令,参见表7.2
9
7.1.2 Bootloader 的启动
用户可以利用串口和Bootloader进行交互 Bootloader多数是两阶段的启动过程
第一个启动阶段是和硬件平台相关的,大都采用汇 编程序编写 第二个启动阶段是和硬件平台无关的,大都采用C 语言编写。
大多数Bootloader都包含两种不同的操作模式: 本地加载模式和远程下载模式。
Bootloader的烧写有两种方式:通过JTAG口 烧写和通过串口烧写。
在Flash被格式化且内存里也没有Bootloader的 时候,此时目标板是一个完全干净的开发板, 就需要通过JTAG口把Bootloader烧写到板子上 串口烧写主要用于更新和升级Bootloader。 在Windows下可以通过超级终端来访问目标板 来进行烧写,在Linux下可以通过MiniCom烧 写。
21
7.2.1 ARM boot
ARMboot是一个ARM平台的开源固件项目,它基 于PPCBOOT,已经与PPCBOOT 项目合并,新的 项目为U-Boot。 ARMboot支持的处理器构架有StrongARM、 ARM720T和PXA250 等 ARMboot的目标是成为通用的、容易使用和移植 的引导程序,非常轻便地运用于新的平台上。 ARMboot是GPL下的ARM固件项目中唯一支持 Flash闪存、BOOTP、DHCP和TFTP网络下载
33
End of Chapter 7
34
RedBoot
是
基于eCos的引导程序
是
是
是
19
第七章 Agenda
7.1 Bootloader 简介 7.2 常用Bootloader 的介绍 7.3 Bootloader 的烧写和使用
20
7.2 常用Bootloader 的介绍
7.2.1 ARM boot 7.2.2 U-Boot 7.2.3 Blob
17
7.1.3 Bootloader 的种类
嵌入式系统世界已经有各种各样的Bootloader, 种类划分的方法也不是唯一的。
一般可以按照它所支持处理器体系结构不同进行 划分。 具体参见表7.1 嵌入式比较常见的Uboot,vivi和blob PC系统上是grub和lilo
18
3
7.1 Bootloader 简介
7.1.1 Bootloader 的概念 7.1.2 Bootloader 的启动 7.1.3 Bootloader 的种类
4
7.1.1 Bootloader 的概念
引入:对于计算机系统来说,从开机上电到操作系统 启动需要一个引导过程。嵌入式Linux系统同样离不开 引导程序,这个引导程序就叫做BootLoader。 对比:回忆一下PC的体系结构我们可以知道,PC机中 的引导加载程序由BIOS(其本质就是一段固件程序) 和位于硬盘MBR中的引导程序一起组成。
诸如u-boot的BootLoader本身集成网络功能支持 这种方式开发板不需要配置较大的存储介质,跟无 盘工作站有点类似。但是使用这种启动方式之前, 需要把BootLoader安装到板上的EPROM或者 Flash中。BootLoader通过以太网接口远程下载 Linux内核映象或者文件系统。 BootLoader下载文件一般都使用TFTP网络协议, 还可以通过DHCP的方式动态配置IP地址。
BIOS在完成硬件检测和资源分配后,将硬盘MBR中的引导 程序读到系统的RAM中,然后将控制权交给引导程序。 引导程序的主要运行任务就是将内核映象从硬盘上读到RAM 中然后跳转到内核的入口点去运行,也即开始启动操作系统。
5
7.1.1 Bootloader 的概念
而在嵌入式系统中,通常并没有像BIOS那样 的固件程序。 因此整个系统的加载启动任务就完全由 BootLoader来完成.