资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
VxWorks系统中映像及其加载过程初学VxWorks,的确有时候会被各种映像类型整的有些晕,根据自己的学 习过程总结一下。常用的分类标准如下:分类标准类型功能BootRom、 VxWorks文件格式* .bin、* .hex、* .sys 等运行物理位置ROM中运行的、RAM中运行的是否压缩压缩的和非压缩的图表1 VxWorks系统中的各种映像在学习的过程中,大多数书籍或者技术分档中直接将这些映像说成VxWorks 映像,这导致我在理解中产生过困惑。个人认为应该统一说成是“VxWorks系统 中的映像”要更便于理解(因为按功能分里又有VxWorks映像的说法,这样不同 的实体在概念上有所重叠)。根据映像的作用可以VxWorks系统中将这些映像分为两大类,即启动映像BootRom和VxWorks映像(如图1所示)。Boat iinasc C BoolRcm) *Loadable imagE-飓碗T蜒系统中的血評Kom-Esed imaged图表2 VxWorks系统中的映像按功能分类其中VxWorks映像又分成三种,即可加载的、基于ROM的和驻留ROM的,对于这三种的说明如下表:VxWorks类型 在Tornado中的文件功能说明名Loadable image(可加载的)vxWorks在RAM中运行的VxWorks映像,要 通过BootRom来加载。Rom-Based image(基于ROM的)vxWorks_romROM启动、RAM运行的VxWorks映像, 不需要BootRom辅助引导vxWorks_romCompressvxWorks_rom的压缩格式Rom_Resident image (驻留 ROM 的)vxWorks_romResidentROM启动、RAM运行的VxWorks映像, 不需要BootRom辅助引导图表3 VxWorks映像的类型那么可加载的VxWorks映像是在RAM中运行的,需要BootRom(即Boot Image) 来加载。对于每一种映像的加载过程中,初始化工作通常包含三个部分的初始化, 即ROM初始化、RAM初始化和一般初始化,下面就几种映像的加载过程进行描述, 可以看到在使用Lodable的VxWorks映像时候需要对RAM先进行初始化。BootRom image (+Loadable image)BootRom映像是一个最小化、专用的VxWorks映像,又称为启动映像,它保 存在固定位置,比如说FlashROM或者ROM中,主要负责加载和运行最终使用的 VxWorks映像(Loadable image),所以在建立开发环境之前,我们需要首先定 制和建立BootRom,然后去通过它下载配置的可加载的映像到RAM中运行。在 Tornado2.2中,BootRom生成的文件有很多种格式,通常我们生成bootrom或 者bootrom.bin文件(压缩的、最小的)。BootRom先把自身的一部分代码拷贝到RAM_HIGH_ADRS地址。而对于压缩的 映像,则为RAM_LOW_ADRS,拷贝的同时还要进行解压缩,然后再进行代码的第 二次重定位将解压后的拷贝到RAM_HIGH_ADRS。拷贝完成之后,根据BootLine 中的参数区加载VxWorks映像,并把VxWorks映像拷贝到RAM_LOW_ADRS开始的 地址空间(在RAM中运行VxWorks,需要先解压和复制所有的text、bss、data 段到RAM的RAM_LOW_ADRS中)函数sysInit ()主要是用来初始化RAM的,系 统直接跳到RAM的首地址去运行VxWorks。A.最少化的系统初始化BootRom的启动过程:文件 romlnit.s 中的 romlnit ()f 文件 bootlnit.c 中的 romStart ()f文件 bootConfig c 中的usrlnit () usrRoo t ()(其中 usrlnit () 和usrRoot ()函数还调用了其他很多初始化的函数)注意:与 V xWorks image 的区别在于一 个Boo tRom 调用 bootConfig.c,而 VxWorks调用 usrConfig.c bootConfig.c主要完成BootRom 映像的初始化, 而usrConfig.c主要完成V xWorks映像的初始化。FRIEJjOW/DRSRAM_HIQH_ADRS吶4嗣减*图表4 BootRom的加载过程B.用BootRom加载Loadable映像的启动过程为:文件 romlni t.s 中的 romIni t ()f文件 boo tlni t.c 中的 romS tart ()f文件sysAL让.s中的sysInit ()初始化RAMf文件 usrConfig.c 中的usrlnit () f usrRoo t ()(其中 usrIni t () 和 usrRoot ()函数还调用了其他很多初始化的函数)尺0阿愈QJ必LOCAL MEM bOGfcL 僵DRSMMFAMJW_ADRS-FRE_IX)W_ADRSRAM. HIGH. WRS-SAisMeisiTqpQ图表5 BootRom加载Lodable映像的过程Rom-Based image (基于 ROM 的 VxWorks 映像)前面说了这种类型映像不需要BootRom的支持,那么它(下面所说的驻留ROM的映像也是)融合了 BootRom的引导功能,它在ROM中启动,然后把VxWorks 拷贝到RAM中去运行。其加载和引导VxWorks映像的过程是:文件 romlnit.s 中的 romlnit ()f 文件 bootlnit.c 中的 romStart ()f文件 usrConfig.c 中的usrInit () fusrRoo t ()(其中 usrIni t ()和 usrRoot ()函数还调用了其他很多初始化的函数)尺。观加腳RAWLOCAL_MEM_UOGAL_ADR5 .RAM_LjOW_ADRS-FREE_LOW_DRS-RAM-HIGH.DRS-1图表6基于ROM的VxWorks映像的加载过程Rom_Resident image (驻留 ROM 的 VxWorks 映像)在ROM中启动,并在运行VxWorks。这里说的驻留是指运行用的text段是 在ROM中,其他段则复制到了 RAM中去分配。将VxWorks放在ROM中运行主要是 为了节省RAM空间,以便更大的空间去运行应用程序,这种方式只把VxWorks image 的 data 段,bss 段复制到 RAM 的 LOCAL_LOW_ADRS,text 部分留在 ROM 并 在ROM中执行,由于text段是在ROM中运行,所以它的运行速度慢。其加载和引导VxWorks映像的过程是:文件 romInit.s 中的 romInit ()f 文件 bootlnit.c 中的 romStart ()f 文件 usrConfig.c 中的 usrInit () fusrRoot ()图表7驻留ROM的VxWorks映像的加载过程参考资料:1.VxWorks程序开发实践2.htt p:/www.embhelp.com/drew/mypage/VxWorks.h tmE0甌瑕闆购妙LOCAL_MEM_LOCAL_ADRSh貼M g训 ADRS-1LUFREE_Lj3W_ADRS 1RAM. HIGH. ADRBoo? Fmgrtnv1Boot PKigsaKi*旳Eeod段*
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号