当前位置:文档之家› 嵌入式系统BOOTLOADER的设计与实现

嵌入式系统BOOTLOADER的设计与实现

复旦大学硕士学位论文嵌入式系统BOOTLOADER的设计与实现姓名:朱晶申请学位级别:硕士专业:计算机应用技术指导教师:涂时亮20040427摘要y-一651830嵌入式系统是把计算机直接嵌入到应用系统中,它融合了计算机软硬件技术,通信技术和半导体微电子技术,嵌入式设备已经越来越多地应用在现代人的工作和生活中,它在当今的应用正变得越来越广泛。

BOOTLOADER作为嵌入式系统软件的重要组成部分,对它的研究和实现无疑也具有重要的现实意义。

本文首先对嵌入式系统BOOTLOADER的特点和作用进行了介绍。

然后从嵌入式系统的角度对如何实现BOOTLOADER进行了比较全面的分析。

本文对嵌入式系统的硬件初始化,串u驱动及传输协议,网口驱动及传输协议,USB驱动及传输协议,FLASH的驱动等等都做了比较洋细的分析。

并结合EV4480丌发板,给出了实现的具体细节。

最后,对已经实现的BOOTLOADER进行了测试和评估,并就今后的改进方向提出了自己的意见。

关键字:嵌入式系统;BOOTLOADER;UCLINUXAbstractVirtuallyeveryelectronicdevicedesignedandmanufacturedtodayisallembeddedsystem.Briefly,BOOTLOADERisthefirstsoftwareprogramthatrunswhenacomputerstarts.Itisresponsibleforloadingandtransferringcontroltotheoperatingsystemkernelsoftware.ThisessayintroduceshowtodesignBOOTLOADERinanembeddedsystem.FirstthepaperintroducesthefeaturesandthnctionofBOOTLOADER,thenindetailanalyzesBOOTLOADERfromviewofembeddedfield,andbringsupasystemmodelofBOOTLOADER.Inthispaper,italsohaveadetailresearchonsomepartofBOOTLOADER,suchashardwareinitial,UARTdriverandtransferprotocai,lancarddriverandtflp/ipprotocai,USBdriverandtransferprotocal,FLASHdriveretc.Finally,thispaperimplementsandtestsBOOTLOADERinEV4480evaluationboard,thenbringsupsortieadviceontheimprovementinthefuture.Keyword:BOOTLOADER,embeddedsystem,UCLINUX第一章绪论第一节引言嵌入式系统是把计算机直接嵌入到应用系统中,它融合了计算机软硬件技术,通信技术和半导体微电子技术,嵌入式设备已经越来越多地应用在现代人的JT作和生活中。

嵌入式处理器是嵌入式系统的核心,RISC型处理器具有结构简单,处理速度快和处理功能强等特点,新型的嵌入式系统大多采用RISIC型处理器作为核,如ARM公司的ARM。

ARM公司是嵌入式RISC处理器的知识产权IP提供商,它为ARM架构处理器提供了ARM处理器内核,如ARM7TDMI。

在本应用中,采用的s3c44BO处理器就是ARM7TDMI的内核。

简单的嵌入式系统一般并不使用操作系统,只包含一些控制流程。

但是当系统所提供的功能复杂化以后,比如需要提供图形界面等等,这个时候就必须考虑使用操作系统。

如今,在专用的嵌入式板子运行Uclinux系统已经变得越来越流行。

一个嵌入式Linux系统从软件的角度看通常可以分为四个层次:1.引导加载程序。

包括固化在固件(firmware)中的boot代码(可选),和BootLoader两大部分。

2.Linux内核。

特定于嵌入式板子的定制内核以及内核的启动参数。

3.文件系统。

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

通常用ralTldisk来作为rootfilesystem。

4.用户应用程序。

特定于用户的应用程序。

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

常用的嵌入式GUI有:MicroWindows和MiniGUI等。

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

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

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

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

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

比如在一个基于ARM7TDMI内核的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。

在把Uclinux移植到开发板后,这段引导程序的软件模块就是hcad—micetek.O,它随后调用misc.O这个解压缩模块中的解压缩函数,解压piggy.o这个Uelinu_x内核,把内核解到开发板的rain中后,跳到内核入口处执行。

下面将从BootLoader的概念、BootLoader的主要任务、BootLoader的框架结构等三个方面来讨论嵌入式系统的BootLoader。

第二节BOOTLOADER的概念简单地说,BootLoader就是在操作系统内核运行之前运行的一段小程序。

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

通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。

因此,在嵌入式世界里建立~个通用的BootLoader几乎是不可能的。

尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以应用于各种特定的BootLoader设计与实现。

1.BootLoader所支持的CPU和嵌入式板每种不同的CPU体系结构都有不同的BootLoader。

有些BootLoader也支持多种体系结构的CPU,比如U—Boot就同时支持ARM体系结构和MIPS体系结构。

除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。

这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种CPU而构建的,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,通常也都需要修改BootLoader的源程序。

2.BootLoader的安装媒介(InstallatiOnMedium)系统加电或复位后,所有的CPU通常都从某个由CPU制造商预先安排的地址上取指令。

比如,基于ARM7TDMIGore的CPU在复位时通常都从地址Ox00000000取它的第一条指令。

而基于CPU构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被映射到这个预先安排的地址上。

因此在系统加电后,CPU将首先执行BootLoader程序。

3.用来控制BootLoader的设备或机制主机和目标机之间一般通过串口建立连接,BootLoader软件在执行时通常会通过串口来进行I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。

4.BootLoader的启动过程是单阶段(SingleStage)还是多阶段(Multi—Stage)通常多阶段的BootLoader能提供更为复杂的功能,以及更好的可移植性。

从固态存储设备上启动的BootLoader大多都是2阶段的启动过程,也即启动过程可以分为stagel和stage2两部分。

而至于在stage1和stage2具体完成哪些任务将在下面讨论。

5.BootLoader的操作模式(OperationMode)大多数BootLoader都包含两种不同的操作模式:”启动”模式和”下载调试”模式,这种区别仅对于开发人员才有意义。

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

启动模式:这种模式也称为”自主”(Autonomous)模式。

也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。

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

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

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

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

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

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

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

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

6.BootLoader与主机之间进行文件传输所用的通信设备及协议最常见的情况就是,目标机上的BootLoader通过串口与主机之间进行文件传输,传输协议通常是Xmodem/Ymodem/Zmodem/Kermit协议中的一种。

在本应用中,开发了串口驱动,使用了Xmodem作为传输协议。

但是,串口传输的速度是有限的,因此可以通过其它方式来下载文件。

一种是通过以太网连接并借助TFTP协议来下载文件。

相关主题