阐述对BootLoader的理解和分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

阐述对B o o t L o a d e r的理解和
分析(总11页)
-CAL-FENGHAI.-(YICAI)-Company One1
-CAL-本页仅作为文档封面,使用请直接删除
`
物理与电子工程学院
《嵌入式系统设计》
设计性实验报告
题目阐述对BootLoader的理解和分析
系别
年级专业
班级学号
学生姓名
指导教师
实验时间
目录
课题要求 ..................................................................... 错误!未定义书签。

1.本课题的目的................................................................... 错误!未定义书签。

2.运行环境 ........................................................................... 错误!未定义书签。

正文.............................................................................. 错误!未定义书签。

一.BootLoad简介 ............................................................. 错误!未定义书签。

二.系统设计 ...................................................................... 错误!未定义书签。

三.技术实现问题................................................................. 错误!未定义书签。

四.总结与体会 ..................................................................... 错误!未定义书签。

设计性实验报告成绩:指导教师签名:... 错误!未定义书签。

摘要
在嵌入式系统中,由于不具有自举开发的能力,其BootLoader除了引导操作系统之外,还要担负辅助开发的责任,如与主机通信、与用户交互、更新系统等功能。

虽然嵌入式系统不可能实现通用的BootLoader,但是各系统的BootLoader依然具有一定的相同性,因此,嵌入式系统中常用的BootLoader也都具有可移植性,可以在大部分代码不更改的情况下,根据本系统的情况,通过修改具体硬件相关的代码并进行相应的配置来使用。

关键字:概述,作用,操作模式,分类,基本原理。

正文
一.BootLoad简介
BootLoader的概述
BootLoader是操作系统和硬件的纽带,它负责初始化硬件,引导操作系统内核,检测各种参数给操作系统内核使用。

事实上,一个功能完备的大型BootLoader,就相当于一个小型的操作系统。

在嵌入式领域中,操作系统移植的关键在于BootLoader的移植以及操作系统内核与硬件相关部分的移植。

Bootloader是在操作系统运行之前执行的一段小程序。

通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射表,从而将系统软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

通常,Bootloader是严重依赖于硬件而实现的,特别是在嵌入式世界里,嵌入式产品型号众多,硬件环境复杂,建立一个通用的Bootloader几乎是不可能的。

尽管如此,仍然可以对Bootloader归纳出一些通用的概念来,以指导特定的Bootloader设计与实现。

因此,正确进行Linux移植的条件是具备一个与Linux配套、易于使用的Bootloader,它能够正确完成硬件系统的初始化和Linux的引导。

Bootloader 不但依赖于CPU 的体系结构,而且依赖于嵌入式系统板级设备的配置。

对于两块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的Bootloader 程序也能运行在另一块板子上,一般也都需要修改Bootloader 的源程序。

反过来,大部分Bootloader 仍然具有很多共性,某些Bootloader 也能够支持多种结构的嵌入式系统。

通常它们能够自动从存储介质上启动,都能够引导操作系统启动,并且大部分都可以支持串口和以太网接口。

Bootloader 的作用
图1—1Bootloader 的作用
如图1-1所示,一个嵌入式Linux 系统从软件的角度看通常可以分为四个层次:
1) 引导加载程序,包括固化在固件(firmware )中的boot 代码和Bootloader 两大
部分。

2) Linux 内核,特定于嵌入式硬件的定制内核以及内核的启动参数。

3)文件系统,包括根文件系统和建立于Flash内存设备之上的文件系统。

通常用
ram disk来作为根文件系统。

4)用户应用程序,特定于用户的应用程序。

有时在用户应用层序和内核层之间可能
还会包括一个嵌入式图形用户界面GUI。

引导加载程序是系统加电后运行的第一段软件代码。

回忆一下PC的体系结构可以知道,PC中的引导加载程序有BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OS BootLoader(如LILO和GRUB等)一起组成。

BIOS在完成硬件测试和资源分配后,将硬盘MBR的Bootloader读到系统的RAM中,然后将控制权交给OS Bootloader。

Bootloader 的主要运行任务就是将内核映像从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。

而在嵌入式系统中,通常并没有像BIOS那样的固件程序(注:有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由Bootloader来完成。

例如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位是通常从地址0X00000000处开始执行,而在这个地址处安排的通常就是系统的Bootloader程序。

简单地说,就是在操作系统内核运行的一段小程序。

通过这段小程序,可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。

1.3Bootloader操作模式
大多数Bootloader都包含两种不同的操作模式:“启动加载”模式和“下载”模式,这种区别仅对于开发人员才有意义。

但从最终客户的角度看,Bootloader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。

启动加载(Bootloading)模式:这种模式也称“自主”(Autonomous)模式,即启动(Bootloader)从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。

这种模式是Bootloader的正常模式,因此在嵌入式产品发布的时候,Bootloader显然必须工作在这种模式下。

下载(Downloading)模式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机(Host)下载文件,如下载内核映像和根据文件系统映像等。

从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被Bootloader写到目标机上的Fiash类固态存储设备中。

Bootloader的这种模式通常在第一次安装内核与根文件系统是被占用;此外,以后的系统更新也会使用Bootloader的这种工作模式。

工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。

因此产品开发时通常使用这种模式。

像Blob或U-Boot等这样功能强大的Bootloader通常同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。

例如,Blob在启动是处于正常的启动加载模式,但是它会延时10S等待终端用户按下任意键而将blob切换到下载模式。

如果在10S内没有用户按键,则blob继续启动Linux内核。

最常见的情况是,目标机上的Bootloader通过串口与主机之间进行文件传输,传输协议通常是xmodem/ymodem/zmodem协议中的一种。

但是,串口传输的速度是有限的,因此通过以太网连接并借助TFTP协议来下载文件是个更好的选择。

二.常用的BootLoader
ARMBoot
ARMBoot是一个BootLoader,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的。

它支持多种类型的Flash;允许映像文件经由bootp、tftp从网络传输;支持从串口线下载S-record或者binary文件;允许内存的显示及修改;支持jffs2文件系统等。

ARMboot发布的最后版本为年ARMboot终止了维护,其发布网址为projects/armboot.
Armboot对S3C44B0板的移植相对简单,在经过删减完整代码中的一部分后,仅仅需要完成初始化、串口收发数据、启动计数器和FLASH操作等步骤,就可以下载引导uClinux 内核完成板上系统的加载.总得来说,ARMboot介于大、小型Boot Loader之间,相对轻便,基本功能完备,缺点是缺乏后续支持。

2.2RedBoot
RedBoot是一个专门为嵌入式系统定制的开发工具,是Redhat公司随eCos发布的一个BOOT方案,是一个开源项目. Redboot是在ECOS的基础上剥离出来的,继承了ECOS 的简洁、轻巧、可灵活配置、稳定可靠等品质优点.它可以使用X-modem或Y-modem 协议经由串口下载,也可以经由以太网口通过BOOTP/DHCP服务获得IP参数,使用TFTP方式下载程序映像文件,常用于调试支持和系统初始化(Flash下载更新和网络启动).Redboot 可以通过串口和以太网口与GDB进行通信,调试应用程序,甚至能中断被GDB运行的应用程序.Redboot为管理FLASH映像,映像下载,Redboot配置以及其他如串口、以太网口提供了一个交互式命令行接口,自动启动后,REDBOOT用来从TFTP服务器或者从Flash下载映像文件加载系统的引导脚本文件保存在Flash上.
2.3U-Boot
U-Boot是sourceforge网站上的一个开放源代码的项目。

U-Boot支持的处理器构架包括PowerPC (MPC5xx,MPC8xx,MPC82xx,MPC7xx,MPC74xx,4xx), ARM
(ARM7,ARM9,StrongARM,Xscale),MIPS (4Kc,5Kc),x86等等, U-Boot(Universal Bootloader)从名字就可以看出,它是在GPL下资源代码最完整的一个通用Boot Loader.
U-Boot的功能是如此之强大,涵盖了绝大部分处理器构架,提供大量外设驱动,支持多个文件系统,附带调试、脚本、引导等工具,特别支持Linux,为板级移植做了大量的工作.版本特别包含了对SA1100和44B0芯片的移植,所以44B0移植主要是针对Board 的移植,包括FLASH、内存配置以及串口波特率等等.U-Boot的完整功能性和后续不断的支持,使系统的升级维护变得十分方便.
2.4 Vivi
Vivi是韩国mizi公司开发的BootLoader,适用于ARM9处理器。

Vivi有两种工作模式:启动加载模式和下载模式。

启动加载模式可以在一段时间后自行启动Linux内核,这是默认模式。

在下载模式下,已为用户提供一个命令行接口,通过接口可以使用Viivi提供的一些命令。

三. BootLader基本原理
BootLader的结构
从结构上,BootLoader的各项功能之间有一定的依赖关系,某些功能是与硬件相关的,某些功能是纯软件的。

芯片的启动代码是BootLoader必备的基础,不同处理器启动需要的设置是不同的。

即使是相同的处理器,其内存空间的配置也是不一样的。

因此,各个嵌入式系统的启动代码一般都是不相同的。

运行操作系统是BootLoader的核心功能,包括将操作系统加载到内存,开辟操作系统所需要的数据代码区域,然后跳转到操作系统的代码处运行。

在嵌入式统统中,BootLoader运行操作系统和操作运行应用程序的过程有所不同。

操作系统内核一般被编译成纯二进制代码,BootLoader运行操作系统内核主要是内存加载和跳转两个步骤;操作系统运行应用程序则复杂得多,需要进行程序头的解析。

根据BootLoader的功能,可以支持不同操作系统的引导。

一般情况下,BootLoader在引导操作系统的时候,是运行纯二进制操作系统映像,本质是将其加载到内存、创建运行环境和跳转运行,附加的功能还包括传递一些参数。

对于这种引导模
式,运行不同操作系统映像文件的差异不大。

某些功能强大的BootLoader可以支持不同格式的操作系统映像的加载。

在这种情况下,BootLoader对操作系统的加载过程类似于BootLoader运行一个应用程序。

在一般BootLoader的功能框架中,人机交互的功能是系统的逻辑核心,它将BootLoader各部分的功能组织在一起,并向外部提供交互的接口,用户可以通过命令行控制BootLoader。

人机交互功能本身是一个与具体硬件相关的功能,但是它一般需要建立在目标机---主机通信机制之上,如使用系统的串口。

BootLoader的通信功能主要完成目标机到主机的通信,通信模块主要依赖的硬件机制包括串口、网络、USB等。

一般来说,串口可以实现目标机-主机控制台的功能,实现人机交互的基础;而网络和USB的速度较快,可以实现较大的文件传输,它们通常建立在TCP/IP网络的协议之上。

在通信功能中,通信层接口、网络协议等功能是和硬件无关的,而串口、网络USB等模块的驱动是与硬件有关的,需要不同的嵌入式系统根据自身的情况实现或者移植。

Flash相关的功能也是BootLoader常见的功能,这是由于嵌入式系统中BootLoader需要烧写自身系统,完成系统的更新。

功能强大的BootLoader还可以支持Flash上的分区和文件系统的功能。

BootLader的启动程序
对于PC机,其开机后的初始化处理器配置、硬件初始化等操作是由BIOS完成的,但是对于嵌入式系统说,出于经济型、价格方面的考虑,一般不配置BIOS,因此必须自行编写完成这些工作的程序。

系统加电复位后,几乎所有CPU都从复位地址上取指令。

例如,基于ARM7TDMI核的CPU复位时,通常都从地址0X00000000取它的第一条指令。

而以处理器为核心的嵌入式系统,通常都有某种类型的固态存储设备被映射到这个预先设置好的地址上。

在系统内核或者用户应用程序运行之前,首先必须运行一段程序代码。

通过这段程序,可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境设定在一个合适的状态,以便为最终调用操作系统内核,运行用户应用程序准备好正确的环境。

对于嵌入式系统来说,有的使用操作系统,也有的不使用操作系统,比如功能简单仅包括应用程序的系统,但是在系统启动时,都必须运行BootLoader,为系统运行准备好软硬件环境。

BootLoader依赖于硬件和应用环境,因此嵌入式系统建立一个通用、标准的BootLoader的有困难的。

系统的启动通常有两种方式:一种是可直接从Flash启动;另一种是可将压缩内存的内存映像文件从Flash中复制、解压到RAM,再从RAM启动。

当电源打开时,一般的系统会去执行ROM里面的启动代码。

这些代码是用汇编语言编写的,其主要作用在于初始化CPU和板子上的必备硬件、
系统代码完成基本软硬件环境初始化后,对于有操作系统的情况,启动操作系统,启动内存管理、任务调用,加载驱动程序等,最后执行应用程序或等待用户命令;对于没有操作系统的系统,直接执行应用程序或等待用户命令。

四. BootaLoader的实现
自己实现BootLoader
对于一个特定的嵌入式系统,实现BootLoader并不是一件很复杂的事情。

在实现的过程中,主要包含以下几个工作点:
1)启动代码
在启动代码中,需要完成处理器异常向量表、处理器初始化代码、内存处理等等工作。

启动代码一般需要使用汇编语言实现,启动代码的最后跳转到C语言执行程序。

控制台功能
2)控制台功能实包含两个方面:
一方面是信息的输出,开发者必需得到程序的输出信息,才能得知程序的运行状态,在BootLoader中,可以通过直接使用UART串口,实现信息输出的功能。

另一方面是控制的输入,开发者如果需要控制系统的运作,必须要有输入的功能,只有这样才能控制程序中得分支跳转。

3)启动操作系统内核
启动操作系统内核是BootLoader的本职工作。

为了启动操作系统的内核,BootLoader需要将操作系统内核加载到RAM,初始化内核的数据段,跳转到内核运行及传递参数。

4)基本通信功能
简单的通信功能可以建立在串口基础上,虽然串口速度比较慢,但是可以和控制台使用一个串口通道,方便易行。

由于串口硬件传输方式的限制,要通过UART传输二进制信息,需要实现简单的编码程序。

移植BootLoader
BootLoader的移植过程中,需要实现引导代码、串口通信功能、Flash烧写等部分的移植。

各个处理器和系统的引导代码都不相同;串口通信是人机交互的硬件基础,在BootLoader的移植过程中是必不可少的;Flash烧写是固化操作系统时需要的功能,某些BootLoader提供了Flash烧写的功能,这种功能一般和具体的硬件平台关系不大,只和具体的Flash芯片相关。

五. 参考文献
[1] 周立功. ARM嵌入式系统软件开发实例 [M]. 北京:北京航天航空大学出版社,2004.
[2] 黄智伟,邓月明,王彦. ARM9嵌入式系统设计基础教程[M]. 北京:北京航天航空大学出版社,2008.
[3] . 徐英慧,马忠梅,王磊,王琳 ARM9嵌入式系统设计[M]. 北京:北京航天航空大学出版社,2007.
[4] 刘洪涛,孙天泽. 嵌入式系统技术与设计[M]. 北京:人民邮电出版社,2009.
[5] 作者. 书名[M]. 版本(第一版不标注).出版地:出版者,出版年.
[序号] 作者. 书名[M]. 版本(第一版不标注).出版地:出版者,出版年.。

相关文档
最新文档