ROM 型启动方式概述

所有的VxWorks 内核映像类型中,只有VxWorks 类型使用的bootrom 引导程序进行启动,此时VxWorks 内核映像放置在主机端,由目标板bootrom 完成VxWorks 的下载,一般通过网口(或串口)方式进行。其他类型(文件名中带有rom字样的)无须bootrom的配合,也即不需要bootrom。因为这些VxWorks 类型的内核映像自身(而非bootrom)被烧入开发板系统ROM或者Flash中,均无须进行下载,系统上电时,将直接跳转到VxWorks内核映像入口函数执行操作系统的初始化工作。

ROM型启动方式下的VxWorks内核映像类型有以下几类。

① VxWorks_rom.bin:非压缩版VxWorks内核映像类型不含内核符号表。如果需要包含内核符号表,则在config.h文件中定义INCLUDE_STANDALONE_SYM_TBL组件。

② VxWorks.res_rom.bin:非压缩版代码驻留ROM 中执行的VxWorks内核映像类型(含内核符号表)。

③ VxWorks.res_rom_nosym.bin:非压缩版代码驻留ROM中执行的,不包含内核符号表的VxWorks内核映像类型。

④ VxWorks.st_rom.bin:压缩版本的内含内核符号表的VxWorks内核映像类型。

⑤ VxWorks_romCompress.bin:压缩版的不含内核符号表的VxWorks内核映像类型。

不同的VxWorks内核版本下,在内核映像名称上会有所变化,但一般都包含在以上类型中。从这些映像类型来看,主要有以下区分:

l 是否为ROM驻留方式,即代码是否被复制到RAM中执行。

l 是否进行了压缩。

l 是否包含符号表。

VxWorks内核映像是否包含内核符号表对于后续函数的调用非常重要,如在串口命令行下输入一个函数名称,如果内核映像不包含内核符号表,即使在内核中包含该函数定义,在终端也会给出“undefined symbol”错误。

以下从三个不同角度介绍它们的不同点,首先以VxWorks_rom.bin文件类型介绍执行的基本流程(采用“文件名:函数名”方式)。

1)romInit.s:romInit。

此处romInit函数完成的工作同bootrom,实际上,二者使用相同的romInit函数实现。

2)bootInit.c:romStart。

首先将其自身复制到RAM_HIGH_ADRS变量指向的RAM 区,以便从RAM执行。注意与上文中bootrom 的区别,虽然使用的是相同的romStart 函数实现,但在RAM 地址上存在差别,关键点在于VxWorks内核映像被复制到RAM_LOW_ADRS指向的内存地址处。

romStart函数完成如下任务:

l 由于是非压缩版本的VxWorks 内核映像,故所有的代码一次性从ROM 复制到由RAM_LOW_ADRS变量指向的RAM 内存处。

l 对于cold boot(冷启动)方式,将其他BSS区清零。

l 最后跳转到usrInit(注意:是usrConfig.c文件中定义的)函数进行执行。

3)此后的执行流程为:usrConfig.c:usrInit→usrConfig.c:usrRoot。usrConfig.c:usrRoot 函数执行完毕后,VxWorks操作系统即已完成启动,系统进入正常运行状态。

其他ROM型VxWorks内核映像启动流程差别如下:

1)是否为ROM 驻留方式。

对于ROM 驻留方式而言,在以上第一步中只将数据部分从ROM 载入到由RAM_LOW_ADRS指向的内存区域,代码仍然滞留在ROM中,此后一直从ROM 中读取代码执行,此种执行方式造成效率的部分损失,一般也较少使用。涉及的文件类型为:

VxWorks.res_rom.bin和VxWorks.res_rom_nosym.bin。

2)是否进行了压缩。

对于压缩的VxWorks内核映像,在以上第一步复制中,将分两个阶段完成:第一阶段完成非压缩代码(romInit函数、romStart函数)的复制,这部分代码被复制到RAM_HIGH_ADRS指向的RAM 内存处;第二阶段完成压缩代码的解压缩和复制过程,这部分代码被解压缩到RAM_LOW_ADRS指向的RAM 内存处。

3)是否包含了符号表。

所谓符号表,是内核中定义的所有函数与其(虚拟)地址的对应关系表。符号表与VxWorks内核映像一般是分离的,为了调试方便,一般需要独立的载入符号表,当然也可以将符号表纳入VxWorks 内核映像中作为一个整体。VxWorks.st_rom.bin文件类型即将符号表作为了内核映像的一部分。

符号表最大的作用是在命令行直接输入函数名即可运行该函数,内核查询符号表获得对应的地址并转到该地址处执行。另外,在调试时,也可以对地址进行函数名标注,从而方便调试,符号表与VxWorks内核通常是独立的,所以无论是否包含符号表,都不会对内核初始化流程造成影响。当VxWorks内核映像被载入RAM后,进入usrInit函数执行时,最终分布图如图3-5 所示。

ROM型VxWorks内核映像类型启动流程总结如下(由于其中只涉及VxWorks内核,故采用“文件名:函数名”方式)。

romInit.s:romInit→bootInit.c:romStart→完成VxWorks 内核从ROM到RAM 的复制(和解压缩)→usrConfig.c:usrInit→usrConfig.c:usrRoot→VxWorks操作系统启动完成。

ROM型启动方式概述的更多相关文章

  1. VxWorks 基本启动方式

    VxWorks 基本启动方式     按VxWorks内核的下载形式,VxWorks启动总体上分为两种方式:下载型和ROM 型.     @下载型启动方式:bootrom+VxWorks.此时boot ...

  2. Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解

    前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...

  3. stm32 boot0 boot1的启动方式

    STM32三种启动模式对应的存储介质均是芯片内置的,它们是: 1)用户闪存 = 芯片内置的Flash. 2)SRAM = 芯片内置的RAM区,就是内存啦. 3)系统存储器 = 芯片内部一块特定的区域, ...

  4. Service 简介 启动方式 生命周期 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. S3C2440启动方式

    不管S3C2440的启动设备是什么,它都是从0x0000 0000地址开始执行程序的,所不同的是地址的映射不一样.基于S3C2440的嵌入式系统上电之后,需要首选选择启动设备,2440的启动方式选择是 ...

  6. I.MX启动方式和头部

    1. 启动方式 2. 头部信息 编译好的bin文件烧写到SD卡中,需要加一些头部文件,才可以执行. Image vector table,简称 IVT,IVT 里面包含了一系列的地址信息,这些地址信息 ...

  7. Linux内核启动过程概述

    版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创 ...

  8. Redis的三种启动方式

    转载:http://www.tuicool.com/articles/aQbQ3u Part I. 直接启动 下载 官网下载 安装 tar zxvf redis-2.8.9.tar.gz cd red ...

  9. spring有三种启动方式

    spring有三种启动方式,使用ContextLoaderServlet,ContextLoaderListener和ContextLoaderPlugIn spring3.0及以后版本中已经删除Co ...

随机推荐

  1. HDU [1529] || POJ [P1275] Cashier Employment

    经典的差分约束+二分答案. 本题的难点在于如何建图. 设x[i] 表示第i个小时可以开始工作的有多少个人. num[i] 表示第i个小时最少需雇佣多少人. s[i] 表示1...i小时实际开始工作的有 ...

  2. bzoj 3451: Tyvj1953 Normal [fft 点分治 期望]

    3451: Tyvj1953 Normal 题意: N 个点的树,点分治时等概率地随机选点,代价为当前连通块的顶点数量,求代价的期望值 百年难遇的点分治一遍AC!!! 今天又去翻了一下<具体数学 ...

  3. HDU 5996 dingyeye loves stone [阶梯Nim]

    dingyeye喜欢和你玩石子游戏. dingyeye有一棵nn个节点的有根树,节点编号为00到n−1n−1,根为00号节点.游戏开始时,第ii个节点上有a[i]a[i]个石子.两位玩家轮流操作,每次 ...

  4. 修改XCode默认工程为使用Xib

    概述 自从XCode5开始,当创建一个带有View的iPhone项目时,默认采用了StoryBoards,本文主要是讲解如何手动修改使其切换到使用xib来布局. 修改步骤 1.先将Main.story ...

  5. shared_ptr模版推导的问题

    问题描述 今天在帮同事解决问题时,发现了这个比较有意思的现象,特记录下来备忘. 问题是这样的,同事开发的是应用程序动态库模块,通过应用的框架中以接口方式供外部使用.然后他想对这些接口生命周期进行控制, ...

  6. 小笔记:Timer定时间隔时间操作

    小笔记:Timer定时间隔时间操作,后面有时间再补充和完善: public class TimingSvc { /// <summary> /// 定时器,执行定时任务 /// </ ...

  7. 在Arrays.asList()引发的问题中进一步学习集合与泛型等内容

    前言 最近在网上看到一个问题,情况类似如下(记为问题1): public class Demo { public static void main(String[] args) { System.ou ...

  8. IntelliJ IDEA环境配置

    [pojie](https://www.cnblogs.com/suiyueqiannian/p/6754091.html) Error running Tomcat8: Address localh ...

  9. Centos 7系统优化脚本

    脚本如下,后续继续优化 #!/bin/bash #author junxi by #this script is only for CentOS 7.x #check the OS platform= ...

  10. PHP Extension开发(Zephir版本)

    上篇介绍了C语言开发PHP扩展的方法, 现在介绍使用Zephir开发扩展的方法. 关于Zephir需要简单介绍一下: Zephir 是为PHP开发人员提供的能够编写可编译/静态类型的高级语言.是优秀的 ...