`物理与电子工程学院《嵌入式系统设计》设计性实验报告题目阐述对BootLoader的理解和分析系别年级专业班级学号学生姓名指导教师实验时间嵌入式系统课程小论文1目录课题要求...................................................................错误!未定义书签。1.本课题的目的...............................错误!未定义书签。2.运行环境...................................错误!未定义书签。正文..........................................................................................................2一.BootLoad简介............................................2二.系统设计................................................5三.技术实现问题.............................................7四.总结与体会...............................................8设计性实验报告成绩:指导教师签名:.......10嵌入式系统课程小论文2摘要在嵌入式系统中,由于不具有自举开发的能力,其BootLoader除了引导操作系统之外,还要担负辅助开发的责任,如与主机通信、与用户交互、更新系统等功能。虽然嵌入式系统不可能实现通用的BootLoader,但是各系统的BootLoader依然具有一定的相同性,因此,嵌入式系统中常用的BootLoader也都具有可移植性,可以在大部分代码不更改的情况下,根据本系统的情况,通过修改具体硬件相关的代码并进行相应的配置来使用。关键字:概述,作用,操作模式,分类,基本原理。正文一.BootLoad简介1.1BootLoader的概述BootLoader是操作系统和硬件的纽带,它负责初始化硬件,引导操作系统内核,检测各种参数给操作系统内核使用。事实上,一个功能完备的大型BootLoader,就相当于一个小型的操作系统。在嵌入式领域中,操作系统移植的关键在于BootLoader的移植以及操作系统内核与硬件相关部分的移植。Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射表,从而将系统软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,Bootloader是严重依赖于硬件而实现的,特别是在嵌入式世界里,嵌入式产品型号众多,硬件环境复杂,建立一个通用的Bootloader几乎是不可能的。尽管如此,仍然可以对Bootloader归纳出一些通用的概念来,以指导特定的Bootloader设计与实现。因此,正确进行Linux移植的条件是具备一个与Linux配套、易于使用的Bootloader,它能够正确完成硬件系统的初始化和Linux的引导。Bootloader不但依赖于CPU的体系结构,而且依赖于嵌入式系统板级设备的配置。对于两块不同的嵌入式板而言,即使它们使用同一种处理器,要想让运行在一块板子上的Bootloader程序也能运行在另一块板子上,一般也都需要修改Bootloader的源程序。反过来,大部分Bootloader仍然具有很多共性,某些Bootloader也能够支持多种结构的嵌入式系统。通常它们能够自动从存储介质上启动,都能够引导操作系统启动,并且大部分都可以支持串口和以太网接口。嵌入式系统课程小论文31.2Bootloader的作用图1—1Bootloader的作用如图1-1所示,一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:1)引导加载程序,包括固化在固件(firmware)中的boot代码和Bootloader两大部分。2)Linux内核,特定于嵌入式硬件的定制内核以及内核的启动参数。3)文件系统,包括根文件系统和建立于Flash内存设备之上的文件系统。通常用ramdisk来作为根文件系统。4)用户应用程序,特定于用户的应用程序。有时在用户应用层序和内核层之间可能还会包括一个嵌入式图形用户界面GUI。引导加载程序是系统加电后运行的第一段软件代码。回忆一下PC的体系结构可以知道,PC中的引导加载程序有BIOS(其本质就是一段固件程序)和位于硬盘MBR中的OSBootLoader(如LILO和GRUB等)一起组成。BIOS在完成硬件测试和资源分配后,将硬盘MBR的Bootloader读到系统的RAM中,然后将控制权交给OSBootloader。Bootloader的主要运行任务就是将内核映像从硬盘上读到RAM中,然后跳转到内核的入口点去运行,也即开始启动操作系统。而在嵌入式系统中,通常并没有像BIOS那样的固件程序(注:有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由Bootloader来完成。例如在一个基于应用程序驱动Bootloader内核根文件系统GUI硬件嵌入式系统课程小论文4ARM7TDMIcore的嵌入式系统中,系统在上电或复位是通常从地址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协议来下载文件是个更好的选择。嵌入式系统课程小论文5二.常用的BootLoader2.1ARMBootARMBoot是一个BootLoader,是为基于ARM或者StrongARMCPU的嵌入式系统所设计的。它支持多种类型的Flash;允许映像文件经由bootp、tftp从网络传输;支持从串口线下载S-record或者binary文件;允许内存的显示及修改;支持jffs2文件系统等。ARMboot发布的最后版本为ARMboot-1.1.0,2002年ARMboot终止了维护,其发布网址为:对S3C44B0板的移植相对简单,在经过删减完整代码中的一部分后,仅仅需要完成初始化、串口收发数据、启动计数器和FLASH操作等步骤,就可以下载引导uClinux内核完成板上系统的加载.总得来说,ARMboot介于大、小型BootLoader之间,相对轻便,基本功能完备,缺点是缺乏后续支持。2.2RedBootRedBoot是一个专门为嵌入式系统定制的开发工具,是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-BootU-Boot是sourceforge网站上的一个开放源代码的项目。U-Boot支持的处理器构架包括PowerPC(MPC5xx,MPC8xx,MPC82xx,MPC7xx,MPC74xx,4xx),ARM嵌入式系统课程小论文6(ARM7,ARM9,StrongARM,Xscale),MIPS(4Kc,5Kc),x86等等,U-Boot(UniversalBootloader)从名字就可以看出,它是在GPL下资源代码最完整的一个通用BootLoader.U-Boot的功能是如此之强大,涵盖了绝大部分处理器构架,提供大量外设驱动,支持多个文件系统,附带调试、脚本、引导等工具,特别支持Linux,为板级移植做了大量的工作.U-Boot1.1.1版本特别包含了对SA1100和44B0芯片的移植,所以44B0移植主要是针对Board的移植,包括FLASH、内存配置以及串口波特率等等.U-Boot的完整功能性和后续不断的支持,使系统的升级维护变得十分方便.2.4ViviVivi是韩国mizi公司开发的BootLoader,适用于ARM9处理器。Vivi有两种工作模式:启动加载模式和下载模式。启动加载模式可以在一段时间后自行启动Linux内核,这是默认模式。在下载模式下,已为用户提供一个命令行接口,通过接口可以使用Viivi提供的一些命令。嵌入式系统课程小论文7三.BootLader基本原理3.1BootLader的结构从结构上,BootLoader的各项功能之间有一定的依赖关系,某些功能是与硬件相关的,某些功能是纯软件的。芯片的启动代码是BootLoader必备的基础,不同处理器启动需要的设置是不同的。即使是相同的处理器,其内存空间的配置也是不一样的。因此,各个嵌入式系统的启动代码一般都是不相同的。运行操作系统是BootLoader的核心功能,包括将操作系统加载到内存,开辟操作系统所需要的数据代码区域,然后跳转到操作系统的代码处运行。在嵌入式统统中,BootLoader运行操作系统和操作运行应用程序的过程有所不同。操作系统内核一般被编译成纯二进制代码,BootLoader运行操作系统内核主要是内存加载和跳转两个步骤;操作系统运行应用程序则