加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > 单片机学习

VxWorks系统的映像及其装载过程解析

时间:2013-09-03  来源:123485.com  作者:9stone

    VxWorks是一款优秀的嵌入式实时多任务操作系统,以良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据了重要的一席之地,受到越来越多的用户的青睐。但是作为初学者而言,VxWorks提供了众多的程序映像类型,在开发过程中十分容易让人感到困惑,而且相关的参考资料对这个问题的描述也不集中,因此,本文拟对VxWorks的几种映像作详细的分析。

1 系统映像
    VxWorks的映像主要包括两大类,一类是BootRom类型,一类是VxWorks类型。
(1)BootRom类型
    BootRom类型映像是一个最小化、专用的VxWorks引导映像,实现最少的系统初始化,主要用于启动装载VxWorks映像,其功能类似于PC机的BIOS。BootRom运行时也建立起多任务环境,包括usrRoot任务、网络任务、TFFS任务和FTP任务等。引导映像在运行时,可能在ROM/Flash中执行(例如ROM驻留型引导映像),也可能在RAM 中执行。在系统中其对应的编译规则文件是rules.bsp。
    BootRom类型分为三种:BootRom_res、BootRom_uncmp和BootRom。第一种是一直运行在rom 中的映象,只把data段拷贝到ram 里面;第二种是非压缩方式的映象,data段和text段都要拷贝到ram里面,并在ram里面运行;第三种是压缩方式的映象,生成的时候编译器会把除掉romlnit.s和bootInit.c之外的目标文件压缩并“汇编”成一个bootrom.Z.s,最后和romInit.o,bootInit.o,version.o进行链接,生成bootrom映像。所以它也是要全部拷贝到ram 中,并必须要进行解压缩的工作。而这些工作基本上都是在bootInit.c中进行的。
(2)VxWorks类型
    VxWorks类型映像是系统的主映像,也即是系统最终要运行的映像。该映像在运行时至少有一部分(如:数据段和BSS段)需要在RAM中运行。在系统中其对应的编译规则文件是rules.vxWorks。
    VxWorks类型映像分为四种:VxWorks、VxWorks_rom、VxWorks_romResident和VxWorks_romCompress。如表1。

表1 VxWorks类型映像
文件名 说明
VxWorks RAM运行的VxWorks映像
VxWorks_rom ROM 自动RAM 运行的VxWorks映像,不需要BootRom辅助
VxWorks_romCompress VxWorks_rom 的压缩形式
VxWorks_romResiden ROM启动ROM运行的VxWorks映像,不需要BootRom辅助


(3)BootRom 类型映像和VxWorks类型映像的联系与区别
    对于没有自启动功能的VxWorks类型映像(例如:VxWorks型),在映像运行前就需要一段程序将该映像拷贝到RAM 中运行,而BootRom类型映像在此时就扮演了这种“搬运工”的角色,当VxWorks系统下载完毕,BootRom的任务也就完成了。二者在系统初始化的时候,所做的功能基本相同,但是区别在于BootRom 类型映像调用bootConfig.c,而VxWorks类型映像调用usrConfig.c。

2 映像装载过程
(1)VxWorks_romCompress和VxWorks_rom(如图1)
 

  1. 将不包含VxWorks二进制映像的引导程序data段复制到RAM 中的RAM_HIGH_ADRS。
  2. 冷启动后,将从LOCAL_MEM_LOCAL_ADRS+RESER-VED的内存地址到RAM_HIGH_ADRS-STACK_SAVE的内存地址清零。将从引导程序bss段末端到LOCAL_MEM_LOCAL_ADRS+LOCAL_MEM_SIZE-USER_RESERVED_MEM的内存也清零。
  3. 拷贝VxWorks时,VxWorks_rom 类型映像直接拷贝到以RAM_LOW_ADRS为开始的RAM 中,而VxWorks_rom-Compress类型的映像将压缩的VxWorks解压到以RAM_LOW_ADRS为开始的RAM 中。
  4. 跳到位于RAM_LOW_ADRS地址的解压的VxWorks的入口点,引导代码和堆栈空间将被覆盖。

(2)VxWorks_romResident(如图2)
 

  1. 该映像包含引导代码,在重启时清空RAM,引导代码只将data段拷贝到RAM 中的RAM_LOW_ADRS处。而系统的运行是在ROM 中进行的。
  2. 相对其他映像,这种映像启动速度快,需要的RAM 空间少,但是运行速度慢。

(3)VxWorks

  1. 该映像本身不包含引导程序,需要一个独立的引导程序从本地存储器或者经由网络获取该映像,然后将其下载到RAM中的RAM_LOW_LADRS处运行。这个独立的引导程序就是上文提到的BootRom 类型映像,它可以分为BootRom_res、BootRom_uncmp和BootRom三种。在开发过程中,独立的引导程序需要使用传统的BSP机制来配置和构建。
  2. 图3所示是压缩型的引导程序映像BootRom的标准启动流程,而BootRom_uncmp是非压缩型的引导程序映像,BootRom_res是常驻ROM 型的引导程序映像。
     
  3. 对BootRom型的引导映像来说,启动过程稍微复杂点。它包括压缩部分跟非压缩部分,这个无压缩的部分就是romInit.s+BootInit.c,称为Bootstrap。一上电时,Bootstrap就在Flash/ROM中执行,入口点就是romInit.s的第一条语句。Bootstrap首先把自己拷贝到RAM_LOW_ADRS (因为此时还没有加载VxWorks主映像,所以先借用一下),然后解压缩自身到RAM_HIGH_ADRS。然后跳到RAM_HIGH_ADRS运行引导程序。引导代码执行后,把VxWorks映像装入到起始地址为RAM_LOW_ ADRS的RAM 中(覆盖掉了先前拷贝的bootstrap程序),然后跳转到VxWorks映像装入点运行。
  4. 对BootRom_uncmp来说,过程与BootRom 相似,只不过一开始就把自身拷贝到RAM_HIGH_ADRS地址上运行,省去了解压缩的过程。
  5. 对BootRom_res类型映像来说,仅仅将它的数据段拷贝到RAM_HIGH_ADRS位置。然后在Flash/ROM中运行引导程序。其余过程同上。
  6. 采用独立引导程序的VxWorks系统,不但可以通过本地存储器(如硬盘)获取VxWorks主映像,还可以通过网络获取。图4所示就是这个过程。被下载的VxWorks主映像位于RAM中的RAM_LOW_ADRS处,映像的顶端叫FREE_RAM_ADRS。下载完VxWorks后,引导程序跳到下载映像的sysInit()入口点处(位于RAM_LOW_ADRS)。从这以后,引导程序就完成了它的工作。
     

3 结束语
    总之,VxWorks系统包括多种不同的映像,各自之间的差别造成装载过程的不同,正确的理解这些差异,灵活地使用这些映像,将给开发者带来事半功倍的效果。


分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->单片机学习
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门