vxworks引导启动过程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

一基本概念及引导概述1bootloader/bootrom/bootstrapCPU上电经自复位的过程(由硬件时序逻辑决定的Power-OnStrappingSequence)后,指令指针指向一个固定的地址(after-resetstartingpoint)。这个固定地址因体系架构而异:在一个基于ARM7TDMIcore的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行;在一个MIPS体系架构的嵌入式系统中,系统在上电或复位时通常都从地址0xBFC00000(0x1FC00000)处开始执行。无论是ARM中的0x00000000,还是MIPS中的0x1FC00000,这个入口地址处往往存放的就是系统的BootLoader程序。这个地址往往映射(可参考具体datasheet的MemoryMap)为BootRom的地址空间,这里的BootRom通常为NORFlash或者SPIFlash(早期的可能为EEPROM等非易失性存储介质)。由此可见,bootloader(引导加载程序)是系统上电后运行的第一段软件代码。bootrom则是用来存储bootloader的ROM/Flash芯片。当然bootrom(ROM/Flash)上不仅仅只是存储bootloader,往往还存储着系统映像、应用程序资源和用户配置数据等信息。这样,嵌入式设备每次重新上电后,总能加载系统和恢复上一次的配置。因为嵌入式设备中往往没有配备磁盘,SDRAM又是易失的,因此bootrom上往往还存放着系统映像等数据(可能是压缩的)。在嵌入式系统中,通常没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动微码),因此整个系统的加载启动任务就完全由BootLoader来完成。此时,CPU只认得指令,因此bootloader一般以纯汇编指令开始,而不应该包含任何ELF格式的文件头信息(这些信息只有特定OS才能识别)。bootstrap是bootloader的一部分,是最初级的引导,旨在初始化CPU、内存控制器、时钟、堆栈,目标是让CPU正常运作起来。我们可以认为bootloader=bootstrapprogram+bootimage。bootimage往往初始化最小OS内核,搭建网络下载通道,提供一个可以交互的命令行,以便自我更新(updateboot)或下载更新系统映像(updatevxWorks)。bootloader通常都分为Stage1和Stage2两个阶段,这里的bootstrapprogram对应Stage1,bootimage则对应Stage2。下面从代码构成角度入手,阐述VxWorks下的bootstrapprogram和bootimage的含义。在vxWorks中,若含有bootlader(即下文提到的BootImage+LoadableImage组合类型),则bootstrapprogram主要是指romInit.s+bootInit.c,bootimage主要是指有bootConfig.c、sysAlib.s、sysLib.c以及BSP目录下的其他文件编译链接而成。通常为了节省空间,bootimage部分被压缩作为数据段存储在bootstrapprogram之后——bootrom.bin。bootstrapprogram是在ROM/Flash中运行的,当然为了执行更快,其后半部分也可能拷贝到RAM中执行。很显然,bootstrapprogram是不能压缩的,否则无法完成自举。对于没有bootloader的引导型映像(即下文提到的ROM-basedImage类型,vxWorks_rom*.bin),其固化在ROM/Flash的第一部分bootstrapprogram可能有romInit.s+romStart.c组成,后面无bootimage,紧随其后的为vxWorks映像(可能被压缩)。2vxWorks的bootrom类型3引导流程概述系统上电后,CPU开始从预先安排的地址上开始执行一段指令,这段指令的作用首先是将可执行程序所需的最小环境搭建起来。这个初始化过程包括初始化CPU、内存控制器及各种必需输入/输出设备、磁盘控制器等等。以X86体系结构来说,需要初始化CPU、北桥、南桥,常说的BIOS就是这样一段初始化程序。在那些没有BIOS的架构中,这一工作由系统的bootloader完成。建立了最小可运行系统,操作系统的内核就可以运行了。于是,BIOS或bootloader程序将操作系统从能够永久保存内容的存储介质中读取出来加载到内存中。这些可永久保存内容的存储介质可能是NVROM、磁盘、光盘等,例如我们常说的操作系统光盘。通常,操作系统在加载过程中还会对硬件环境做一次重新初始化,这一次初始化就不仅仅是最小运行环境了。包括CPU在内的全部计算机所包含的硬件都会被操作系统依次初始化,同时初始化的还包括操作系统内核本身。这样,整个系统就处于一种可控状态,可以开始执行用户应用程序了。从引导到系统启动是一个bottom-up的过程;启动后,用户交互到系统响应则是一个top-down的过程。二VxWorks映象1VxWorks映象的组成bootrom的类型前缀或后缀说明bootrom压缩的bootrom映像(除bootstrap代码外)bootorm_uncmp非压缩的bootrom映像bootrom_resROM驻留型的bootrom映像无后缀ELF可执行文件格式.hexMotorolaS-record文件格式.bin裸的二进制格式(一般烧到ROM/Flash零地址处)VxWorks映象由文本段(.text/.code),数据段(.data)和BSS段(.bss)组成。文本段相当于代码段,是由一些指令组成的;数据段就是由一些初始化过的全局和静态变量组成;BSS段也是由全局变量和静态变量组成,只不过他们都没有经过初始化。2VxWorks映象的类型(1).VxWorks(LoadablebinaryVxWorksimage)RAMbasedVxWorksimage,linkedtoRAM_LOW_ADRS.ItisloadedintoRAMviasomeexternalprogramsuchasabootROM.Thisisthedefaultdevelopmentimage.(2).vxWorks_rom(UncompressedROMablebinaryVxWorksimage)RAMbasedimagethatstartsinROM.TheROMstartupcodecopiestheentireimagetoRAMandthenjumpstoit.Thisimagegenerallyhasaslowerstartuptime,butfasterexecutiontime,thanvxWorks_romResident.(3).vxWorks_romCompress(compressedROMablebinaryVxWorksimage)CompressedRAMbasedimagethatstartsinROM.ThisimagecanfitalmosttwicethecodeasotherROMimages.Butithastheslowestboottime,sincetheimagemustbeuncompressed.Therun-timespeedisthesameasforvxWorks_rom.(4).vxWorks_romResident(ROM-residentversionbinaryVxWorksimage)ROMresidentimage.TheprogramtextremainsinROM,onlythedataiscopiedtoRAM.ThisimagehasthefastestboottimeandusestheleastamountofRAM,butrunssloweronboardswithslowROMaccess.相关后缀的含义同bootrom。我们可将VxWorksImage的文件类型划分为两类三种:A.加载型映象(VxWorks类型)(1)LoadableImage是包含用户程序的VxWorks操作系统映象,其不具备引导功能,需要借助bootloader引导程序通过网口或串口下载到RAM中。bootloader在此扮演了“搬运工”的角色。B.可引导型映象可引导型(Bootable)映象包含含有用户程序的VxWorks操作系统映象,并包括完整的引导代码,可以在系统上电后自动完成自身的引导。我们在前面已经分析过,该类映像往往由bootstrapprogram(romInit.s+romStart.c)和紧随其后的为vxWorks映像(可能被压缩)组成。(2)ROM-basedImage(压缩/没有压缩):即将Image直接烧入ROM/flash,运行时将Image拷入(如果压缩则需解压)RAM中运行。(3)ROM-residentImage:Image的指令部分驻留在ROM中运行,仅将数据段部分拷入RAM。注意,以上三种映象都是包含完整VxWorks操作系统的映象,其中后两种可以直接启动并运行起来,但是第一种不行,它必须借助另一个叫做BootImage的映象(可以在Tornado中的build-buildbootrom中生成)才能运行起来,也就是利用BootImage引导起来后通过网口或串口下载真正包含VxWorks的LoadableImage,然后才能运行起来。也即BootImage往往和LoadableImage结合起来使用。现在看来一共有四种映象文件,让我们看看它们的组成:(1)BootImage:包含一段起始引导程序(BootStrapProgram)和一段ROM引导程序(ROMBootProgram)。(2)LoadableImage:由操作系统VxWorks和应用组成的映象。(3)ROM-basedImage(压缩/没有压缩):包含一段叫做BootStrapProgram的程序+LoadableImage(即有操作系统VxWorks和应用组成的映象)。(4)ROM-ResidentImage:同上。通过上面我们可以看出,ROM-basedImage,ROM-ResidentImage,BootImage三种映象都包含一段叫做BootStrapProgram的程序,可以把ROM引导程序的代码段和数据段拷贝到RAM中。同时,它具有启动功能。三VxWorks映象启动流程下面让我们看看三种VxWorks的启动过程:1BootImage+LoadableImage注意:这里和下文的BootImage是指存放在bootrom中的bootloader映像。前面提到LoadableImage是依靠BootImage加载启动的,首先由BootImage中的BootStrapProgram程序把ROM引导程序(ROMBootProgram)加载(如果压缩则需解压)到RAM中的RAM_HIGH_ADRS处,然后跳转到此处执行ROM引导程序,由ROM引导程序负责一系列简单的硬件初始化(网口,串口等),开始下载LoadableImage(即包含应用的VxWorks操作系统)到RAM_LOW_ADRS,然后跳转到此处启动VxWorks操作系统。下面的图一是一个简单的流程图,后面的图二是更为详细的流程图。图一图二(1)图二(2)引导过程成功以后,RAM中ROM引导程序占用的空间(从RAM_HIGH_ADRS开始)可以重新被系统利用。2ROM-basedImage(压缩/没有压缩)这种映象由起始引导程序(BootStrapProgram)和基于ROM的VxWorks映象组成。因此,这种bootrom的体积较大。BootStrapProgram把基于ROM的VxWorks映象加载到内存的RAM_LOW_ADRS处,然后直接启动VxWorks操作系统(如果压缩则需解压)。图三是一

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功