ROM型启动方式概述

简介: <div> <p align="left"></p> <p align="left">ROM 型启动方式概述</p> <p align="left">    所有的VxWorks 内核映像类型中,只有VxWorks 类型使用的bootrom 引导程序进行启动,此时VxWorks 内核映像放置在主机端,由目标板bootrom 完成VxWorks 的下载,一般通过网口(或串口)方式进行。

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

相关文章
|
2月前
|
Shell Linux C语言
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
【Shell 命令集合 磁盘维护 】Linux 创建一个初始化内存盘 mkinitrd命令使用教程
37 0
|
5月前
|
并行计算 Linux 测试技术
GPU实例使用--单实例上运行Linux桌面多开解决方案
客户前期使用的旧异构实例面临更新换代,新的推荐异构实例性能更强,客户的业务软件运行时,GPU使用率不高,需要探索多开方案,提高GPU使用率,提高实例性价比。
|
12月前
教你如何使用一条命令轻松查看电脑所支持的最大运行内存
教你如何使用一条命令轻松查看电脑所支持的最大运行内存
1147 0
|
19天前
|
网络协议 测试技术 开发工具
【ZYNQ】裸机 PS + PL 双网口实现之 LWIP 库文件修改
【ZYNQ】裸机 PS + PL 双网口实现之 LWIP 库文件修改
|
19天前
|
Linux 开发工具
【ZYNQ】配置嵌入式 Linux 静态 IP 地址
【ZYNQ】配置嵌入式 Linux 静态 IP 地址
|
10月前
|
Shell
编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本, CPU型号,内存大小,硬盘大小。
编写脚本/root/bin/systeminfo.sh,显示当前主机系统信息,包括主机名,IPv4地址,操作系统版本,内核版本, CPU型号,内存大小,硬盘大小。
122 0
|
Linux 虚拟化
此虚拟机的处理器所支持的功能不同于保存虚拟机状态的虚拟机的处理器所支持的功能
此虚拟机的处理器所支持的功能不同于保存虚拟机状态的虚拟机的处理器所支持的功能
1381 0
此虚拟机的处理器所支持的功能不同于保存虚拟机状态的虚拟机的处理器所支持的功能
|
Linux
Linux:磁盘情况查询+磁盘情况的工作使用指令(内含使用实例)
Linux:磁盘情况查询+磁盘情况的工作使用指令(内含使用实例)
134 0
Linux:磁盘情况查询+磁盘情况的工作使用指令(内含使用实例)
|
编解码 运维 Linux
Linux 系统使用和初始化配置| 学习笔记
快速学习Linux 系统使用和初始化配置
152 0
Linux 系统使用和初始化配置| 学习笔记
|
缓存 Windows
Windows 技术篇 - 如何查看cpu支持的指令集、型号、属性等详细信息,使用cpu-z工具查看处理器、内存、显卡、主板、缓存、SPD信息方法
Windows 技术篇 - 如何查看cpu支持的指令集、型号、属性等详细信息,使用cpu-z工具查看处理器、内存、显卡、主板、缓存、SPD信息方法
2017 0
Windows 技术篇 - 如何查看cpu支持的指令集、型号、属性等详细信息,使用cpu-z工具查看处理器、内存、显卡、主板、缓存、SPD信息方法