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