(ARM Linux嵌入式系统开发基础)第5章Bootloader开发基础

上传人:au****y 文档编号:118779453 上传时间:2019-12-25 格式:PPT 页数:308 大小:968.50KB
返回 下载 相关 举报
(ARM Linux嵌入式系统开发基础)第5章Bootloader开发基础_第1页
第1页 / 共308页
(ARM Linux嵌入式系统开发基础)第5章Bootloader开发基础_第2页
第2页 / 共308页
(ARM Linux嵌入式系统开发基础)第5章Bootloader开发基础_第3页
第3页 / 共308页
(ARM Linux嵌入式系统开发基础)第5章Bootloader开发基础_第4页
第4页 / 共308页
(ARM Linux嵌入式系统开发基础)第5章Bootloader开发基础_第5页
第5页 / 共308页
点击查看更多>>
资源描述

《(ARM Linux嵌入式系统开发基础)第5章Bootloader开发基础》由会员分享,可在线阅读,更多相关《(ARM Linux嵌入式系统开发基础)第5章Bootloader开发基础(308页珍藏版)》请在金锄头文库上搜索。

1、第5章 Bootloader开发基础,5.1 Bootloader基础 5.2 U-Boot 5.3 ViVi,5.1.1 Bootloader的启动 Linux系统是通过Bootloader引导启动的,上电后执行Bootloader来初始化系统。 系统加电或复位后,所有CPU都会从某个地址开始执行,这是由处理器设计决定的。比如,X86的复位向量在高地址端,ARM处理器在复位时从地址0x00000000读取第一条指令。嵌入式系统的开发板都要把板上ROM或Flash映射到这个地址。因此,必须把Bootloader程序存储在相应的Flash位置上,系统加电后,CPU将首先执行它。,5.1 Boot

2、loader基础,主机和目标机之间一般有串口可以连接,Bootloader软件通常会通过串口来输入/输出。例如:输出出错或者执行结果信息到串口终端,从串口终端读取用户控制命令等。 Bootloader的启动过程通常是多阶段的,这样既能提供复杂的功能,又有很好的可移植性。例如:从Flash启动的Bootloader多数是两阶段的启动过程,本章后面U-Boot内容可以详细分析该特性。,大多数Bootloader包含两种不同的操作模式:本地加载模式和远程下载模式。这两种操作模式的区别仅对于开发人员才有意义,也就是不同启动方式的使用。从最终用户的角度看,Bootloader的作用就是用来加载操作系统,

3、而并不存在所谓的本地加载模式与远程下载模式的区别。 因为Bootloader的主要功能是引导操作系统启动,所以详细讨论一下各种启动方式的特点。,1网络启动方式 这种方式开发板不需要配置较大的存储介质,跟无盘工作站有点类似。但是使用这种启动方式之前,需要把Bootloader安装到板上的EPROM或者Flash中。Bootloader通过以太网接口远程下载Linux内核映像或者文件系统。第3章介绍的交叉开发环境就是以网络启动方式建立的。网络启动方式对于嵌入式系统开发来说非常重要。,使用这种方式也有前提,就是目标板有串口、以太网接口或者其他连接方式。串口一般可以作为控制台,同时可以用来下载内核影像

4、和文件系统。串口通信传输速率过低,不适合用来挂接NFS文件系统。所以以太网接口成为通用的互连设备,一般的开发板都可以配置10 M以太网接口。 对于PDA等手持设备来说,以太网的RJ-45接口结构尺寸大,而USB接口,特别是USB的迷你接口,结构尺寸小。对于开发的嵌入式系统,可以把USB接口虚拟成以太网接口通信。这种方式在开发主机和开发板两端都需要驱动程序。,另外,可在服务器上配置启动相关网络服务。Bootloader下载文件一般都使用TFTP网络协议,还可以通过DHCP的方式动态配置IP地址。 DHCP/BOOTP服务为Bootloader分配IP地址并配置网络参数后,才能够支持网络传输功能。

5、如果Bootloader可以直接设置网络参数,则可不使用DHCP。 TFTP服务为Bootloader客户端提供文件下载功能,把内核映像和其他文件放在/tftpboot目录下。这样Bootloader可以通过简单的TFTP协议远程下载内核映像到内存,如图5-1 所示。,图5-1 网络启动示意图,大部分引导程序都能够支持网络启动方式。例如:BIOS的PXE(Preboot eXecution Environment)功能就是网络启动方式;U-Boot也支持网络启动功能。,2磁盘启动方式 传统的Linux系统运行在台式机或者服务器上,这些计算机一般都使用BIOS引导,并且使用磁盘作为存储介质。进入

6、BIOS设置菜单,可以探测处理器、内存、硬盘等设备,也可以设置BIOS从软盘、光盘或者某块硬盘启动。也就是说,BIOS并不直接引导操作系统。那么在硬盘的主引导区,还需要一个Bootloader,这个Bootloader可以从磁盘文件系统中把操作系统引导起来。 Linux传统上是通过LILO(LInux LOader)引导的,后来出现GNU软件GRUB(GRand Unified Bootloader)。这两种Bootloader广泛应用在X86的Linux系统上。,LILO软件工程是由Werner Almesberger创建,专门为引导Linux开发的。现在LILO的维护者是John Coff

7、man,最新版本下载站点: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 man

8、ual)。GRUB能够使用TFTP和BOOTP或者DHCP通过网络启动,这种功能对于系统开发过程很有用。 除了传统的Linux系统上的引导程序以外,还有其他一些引导程序,也支持磁盘引导启动。例如:LoadLin可以从DOS下启动Linux;还有ROLO、LinuxBIOS,U-Boot也支持这些功能。,3Flash启动方式 大多数嵌入式系统上都使用Flash存储介质。Flash有很多类型,包括NOR Flash、NAND Flash和其他半导体盘。其中,NOR Flash(也就是线性Flash)使用最为普遍。 NOR Flash可以支持随机访问,所以代码可以直接在Flash上执行。Bootlo

9、ader一般是存储在Flash芯片上的。另外,Linux内核映像和RAMdisk也可以存储在Flash上。通常需要把Flash分区使用,每个区的大小应该是Flash擦除块大小的整数倍。图5-2是Flash存储示意图。,图5-2 Flash存储示意图,Bootloader一般存贮在Flash的底端或者顶端,这要根据处理器的复位向量来设置。要使Bootloader的入口位于处理器上电执行第一条指令的位置。接着需要分配参数区,可以作为Bootloader的参数保存区域。然后是内核映像区。Bootloader引导Linux内核,就是要从此处把内核映像解压到RAM中去,然后跳转到内核映像入口执行。最后是

10、文件系统区。如果使用RAMdisk文件系统,则需要Bootloader解压文件系统到RAM中。如果使用JFFS2文件系统,将直接挂接为根文件系统。这两种文件系统将在第7章详细讲解。最后还可以分出一些数据区,这要根据实际需要和Flash大小来考虑。,这些分区是开发者定义的,Bootloader一般直接读/写对应的偏移地址。在Linux内核空间,可以配置成MTD设备来访问Flash分区。但是,有的Bootloader也支持分区的功能,例如:Redboot可以创建Flash分区表,并且内核MTD驱动可以解析出Redboot的分区表。,除了NOR Flash,还有NAND Flash、Compact

11、Flash、DiskOnChip等。这些Flash具有芯片价格低、存储容量大的特点。但是这些芯片一般通过专用控制器的I/O方式来访问,不能随机访问,因此引导方式跟NOR Flash也不同。在这些芯片上,需要配置专用的引导程序。通常,这种引导程序起始的一段代码将整个引导程序复制到RAM中运行,从而实现自举启动,与磁盘启动相似。,5.1.2 Bootloader的种类 嵌入式系统已经有各种各样的Bootloader,种类划分也有多种方式。除了按照处理器体系结构不同划分以外,还有功能复杂程度的不同。 首先区分一下“Bootloader”和“Monitor”的概念。严格来说,“Bootloader”只

12、是引导设备并且执行主程序的固件;而“Monitor”还提供了更多的命令行接口,可以调试、读/写内存、烧写Flash、配置环境变量等。“Monitor”在嵌入式系统开发过程中可以提供很好的调试功能,开发完成以后,就完全设置成了一个“Bootloader”。所以,习惯上大家把它们统称为Bootloader。,表5-1列出了Linux的开放源码引导程序及其支持的体系结构。表中给出了X86、ARM及PowerPC体系结构的常用引导程序,并且注明了每一种引导程序是不是“Monitor”。,表5-1 开放源码的Linux引导程序,对于每种体系结构,都有一系列开放源码Bootloader可以选用。 (1)

13、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 B

14、ootloader也变得多种多样。最早有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。,(

15、4) MIPS。MIPS公司开发的YAMON是标准的Bootloader,也有许多MIPS芯片商为自己的开发板编写了Bootloader。现在,U-Boot也已经支持MIPS平台。 (5) SH。SH平台的标准Bootloader是SH-boot。Redboot在这种平台上也可使用。 (6) M68K。M68K平台没有标准的Bootloader。Redboot能够支持M68K系列的系统。,值得说明的是Redboot,它几乎能够支持所有的体系结构,包括MIPS、SH、M68K等体系结构。Redboot是以eCos为基础,采用GPL许可的开源软件工程。现在由Core eCos的开发人员维护,源码下

16、载网站 /snapshots。Redboot的文档也相当完善,有详细的使用手册Redboot Users Guide。,5.1.3 Bootloader的基本原理 Bootloader是依赖于硬件而实现的,特别是在嵌入式领域。因此,在嵌入式领域里建立通用的Bootloader几乎是不可能的。尽管如此,仍然可以对Bootloader归纳出通用的概念,以指导用户对特定的Bootloader设计与实现。 1Bootloader的操作模式(Operation Mode) 大多数Bootloader都包含两种不同的操作模式:启动加载模式和下载模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,Bootloader 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的 区别。,(1) 启动加载(Bootloading)模式:这种模式也称为自主(Autonomous)模式,也即Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号