• VxWorks 引导程序 分类: vxWorks 2014-03-14 08:45 314人阅读 评论(0) 收藏


    前言:vxworks 的一些文件,如 usrconfig.c 在 config,comp目录中均有出现,因编译方式而选择某一个文件,命令行方式采用 config 目录文件,tornado 图形界面配置选择comp 目录文件。此处采用命令行方式编译。
    Bootrom 完成 vxworks 启动前的基本引导工作,如最简初始化硬件,下载映像文件并解压到RAM中等操作。值得一提的是某些型号处理器对 cache 等部件初始化有特殊要求,可能需在 bootrom 中进行特殊处理。
    一、vxworks映像类型
    Bootrom、vxworks两种映像。
    Bootrom 用于引导 vxworks,功能如上所述。该映像直接烧在FLASH中,也可用UBoot代替。
    Vxworks 多任务的系统映像文件。
    二、Bootrom 启动策略
    共三种:bootrom、bootrom_uncmp、bootrom_res。
    1、bootrom 压缩型,占用 flash 空间小,其中大部分被压缩过,完成将自身从FLASH中解压并搬运到RAM中的操作,该步骤完成后将跳到RAM中继续执行 bootrom 程序(听起来神奇,看起来挺美)。优点:占用flash小,程序段代码段均在RAM中执行,速度快。
    2、bootrom_uncmp 非压缩型,较 bootrom 型占用 flash 大些,完成将自身从flash到ram的搬运过程,无需解压,其后与 bootrom 方式一致。个人认为速度会较 bootrom 方式忙些,因读取 flash 的速度较慢,未压缩,多读取flash时间可能超过 bootrom 方式的解压时间。
    3、bootrom_res 驻留flash型,因未经压缩,占用flash空间和 bootrom_uncmp 大小几乎一致。运行时代码段一致在flash中执行,导致速度较上两种慢;数据段将被搬到RAM中。优点:占用RAM小;缺点:较1占用较多flash空间,较1、2的执行速度慢。
    注:bootrom 与 vxworks 关系易混淆。vxworks 是真正系统运行时映像,因支持多种启动策略,故由其他模块(bootrom、uboot)完成加载。bootrom 在完成加载使命后将不再被执行。
    三、bootrom 启动流程
    这里描述的bootrom均由命令行方式编译产生。
    1、上电后执行顺序
    romInit() (romInit.s)
    -->
    romStart() (bootInit.c)
    -->
    usrInit() (bootConfig.c)
         -->
         excVecInit() (targetlibarmARMARCH4commonlibarch.a)
         -->
         sysHwInit() (bootConfig.c)
         -->
         usrKernelInit() (targetsrcconfigusrKernel.c)
                         (included by bootConfig.c)
         -->
         kernelInit() (targetlibarmARMARCH4commonlibwind.a)
             -->
             usrRoot() (bootConfig.c)
    2、romInit() (romInit.s)
    初始化中断、时钟、系统总线、内存。非 bootrom_res 型 bootrom,还将 bootrom 的 romInit 函数段从 flash 搬运到 ram 中,地址映射,之后该函数的执行将在 ram 中进行。对于 bootrom_res 型 bootrom 将一直在 flash 中执行。因 vxworks 系统启动后,需对所有硬件重新初始化,该函数仅做必不可少的初始化部分。
    注:该函数在 ld 的时候被映射到 RAM_HIGH_ADRS。如下:
    ldarm -X -EL -N   -e romInit
        -Ttext 0C500000   -o bootrom_uncmp romInit.o bootInit_uncmp.o version.o
         bootConfig.o sysALib.o sysLib.o ne2000End.o   --start-group   -LC:Tornado2.2_
    ARM arget/lib/arm/ARMARCH4/gnu -LC:Tornado2.2_ARM arget/lib/arm/ARMARCH4/comm
    on
             -lcplus   -lgnucplus   -lvxcom   -larch   -lcommoncc   -ldcc   -ldrv   -lgcc   -
    lnet   -los   -lrpc   -ltffs   -lvxfusion   -lvxvmi   -lwdb   -lwind   -lwindview C:Tor
    nado2.2_ARM arget/lib/libARMARCH4gnuvx.a --end-group   -T C:Tornado2.2_ARM arg
    et/h/tool/gnu/ldscripts/link.RAM
    3、romStart() (bootInit.c)
    bootrom 型:将 code 段、data 段从 flash 中拷贝到 ram中,清内存,之后对code段进行解压缩。
    bootrom_uncmp 型:将 code 段、data 段从 flash 中拷贝到 ram中,清内存。
    bootrom_res 型:将 data 段从 flash 中拷贝到 ram。

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    360°视频论文调研
    360°视频相机调研
    Oculus VR眼镜调研
    VR论文调研
    3ds Max学习日记(十)——显示场景资源管理器
    最近在学习Flask框架,那么就说下jinja2吧~~~
    最近学习了Sqlite3数据库,写一下操作应用以及命令
    HTML5游戏开发,剪刀石头布小游戏案例
    jquery简单的图片切换效果,支持pc端、移动端的banner图片切换开发
    jquery简单的大背景banner图片全屏切换
  • 原文地址:https://www.cnblogs.com/mao0504/p/4706646.html
Copyright © 2020-2023  润新知