ROM型启动方式概述

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操作系统启动完成。

时间: 2025-01-19 16:01:11

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

VxWorks 基本启动方式

VxWorks 基本启动方式     按VxWorks内核的下载形式,VxWorks启动总体上分为两种方式:下载型和ROM 型.     @下载型启动方式:bootrom+VxWorks.此时bootrom 被烧入ROM 中,而VxWorks内核映像通过串口或者网口下载到系统RAM中.     @ROM型启动方式:VxWorks直接从ROM中运行,不借助于bootrom引导程序.此时VxWorks内核映像被烧入ROM 中,无bootrom程序.     对于不同的启动方式,VxWorks操作系统

迅速掌握Linux的软盘或硬盘启动方式

Linux的启动方式可以从软盘或硬盘引导Linux.从软盘启动Linux时,引导扇区包含的代码只读前数百个数据块(当然,依赖于内核的大小)到预定的内存位置.Linux引导软盘上,没有系统,内核存在连续的扇区中,因为这样简化了引导过程. 软盘引导Linux Linux加载后,它初始化硬件和设备驱动程序,然后运行 init.init可启动其他进程以http://www.aliyun.com/zixun/aggregation/18736.html">允许用户登录并做其他事情.这部分的细节在下面

如何把一个软件的的启动方式改为usbkey启动?

问题描述 如何把一个软件的的启动方式改为usbkey启动? usbkey启动代替手动输入密码,是不是要先写一个程序读取usbkey中的秘钥写入到磁盘,然后在修改软件的启动方式到磁盘中找秘钥?本人小白,求大神指点,比如用到什么技术,参考什么资料或者案例···跪谢!!! 解决方案 去看看JAVA加密与解密的艺术.USBKEY启动里面的安全算法用的是硬实现,如果没有用USBKEY的话,加密算法就是软实现.需要提供和USBKEY里面用到的加密算法相同的软实现的provider:这部分内容非常多,建议楼主

Oracle 数据库系统的启动方式

Oracle数据库系统管理常用的工具是svrmgrl..,启动oracle数据库系统,通常所用的是启动实例的时候不挂接数据库,等启动实例以后再用mount挂接数据库:另外一种方法是在启动实例的时候,加入mount参数,使oracle启动实例与挂接数据库形成一个连续的动作. 有以下几种启动方式: 1.startup nomount 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件. 这种方式启动常用于修复数据库.重建控制文件.重建数据库 等

合理应用activity的启动方式优化程序内存

在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. Activity启动方式有四种,分别是: standard singleTop singleTask singleInstance 可以根据实际的需求为Activity设置对应的启动模式,从而可以避免创建大量重复的Activity等问题. 起作用的场合就是我们每次startActivity时~~~ st

木马病毒的六种启动方式

木马是随计算机或Windows的启动而启动并掌握一定的控制权的,其启动方式可谓多种多样,通过注册表启动.通过System.ini启动.通过某些特定程序启动等,真是防不胜防.其实只要能够遏制住不让它启动,木马就没什么用了,这里就简单说说木马的启动方式,知己知彼百战不殆嘛. 一.通过"开始\程序\启动" 隐蔽性:2星 应用程度:较低 这也是一种很常见的方式,很多正常的程序都用它,大家常用的QQ就是用这种方式实现自启动的,但木马却很少用它.因为启动组的每人会会出现在"系统配置实用程

Oracle启动方式简介

1 .startup nomount 非安装启动,这种方式启动下可执行:重建控制文件.重建数据库 读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件. 2 .startup mount dbname 安装启动,这种方式启动下可执行: 数据库日志归档. 数据库介质恢复. 使数据文件联机或脱机, 重新定位数据文件.重做日志文件. 执行"nomount",然后打开控制文件,确认数据文件和联机日志文件的位置, 但此时不对数据文件和日志文件

WinPE启动方式的基本知识

  WinPE启动方式的基本知识           WinPE的启动方式目前来讲一般分为两种方式,包括普通启动方式和RAM启动方式. 一.普通启动方式: 顾名思义:就是直接在某种介质上启动,WinPE文件不导入内存直接运行,文件放在哪就从哪里启动它 ,这样的话速度就会因不同的介质而有所不同.这种方式对内存的要求不是很大,但是会有点慢. 优点:几乎没有内存的限制,小内存也可以启动,改造方便. 缺点:启动速度受介质不同的影响,启动有点慢. 二.RAM启动方式: 把WinPE文件打包成一个映像文件,

怎么使用U盘/移动硬盘安装EFI启动方式的win8.1系统

EFI启动已经越来越被大家推崇了,尤其是笔记本电脑,大多数的近期主流主板一般都是支持UEFI启动的,所谓UEFI启动就是使用U盘制作的 EFI启动盘,这种启动方式的速度更快更安全,关于UEFI启动,笔者曾在前面的文章做过讲述,如果需要的话,请查看下面的相关阅读,今天亦是美网络主要以实例给大家讲讲如何安装efi启动的win8.1系统. 在开始前,先声明下我的环境: 华硕笔记本,两个磁盘,一个是mSATA 64G固态硬盘(需要重新格式化),一个是1TB 2.5寸普通机械硬盘,先将SSD固态硬盘格式化