VxWorks 操作系统内存布局
在VxWorks操作系统过程中可能使用到的BootRom和VxWorks内核映像本身都可以存在两种方式:压缩的和非压缩的。
1.非压缩形式
如果没有进行压缩,则只有一次重定位,即从ROM到RAM只存在一次代码复制过程,所有ROM中存储的代码都被一次性复制到RAM中。
① 对于BootRom 而言,所有的代码被一次性复制到RAM_HIGH_ADRS 指定地址处,如图3-1所示。
② 对于VxWorks_rom
而言,所有的代码被一次性复制到RAM_LOW_ADRS 指定地址处,如图3-2
所示。
2.压缩形式
如果有进行压缩,则代码复制过程将分为两次,一次是非压缩代码,另一次是压缩代码,且二者复制到内存不同的位置处。
① 对于BootRom
而言,非压缩代码(romInit.s、bootInit.c)被直接复制到RAM_LOW_ADRS
处;压缩代码复制到RAM_HIGH_ADRS
处,并在复制过程中完成解压缩,如图3-3
所示。
② 对于VxWorks_rom
而言,非压缩代码(romInit.s、bootInit.c)被直接复制到RAM_HIGH_ADRS处;压缩代码复制到RAM_LOW_ADRS处,并在复制过程中完成解压缩,如图3-4所示。
事实上,对于压缩版本,在进行编译时,进行了两次代码链接:一次是针对压缩代码的链接,另一次是将非压缩代码和压缩代码整合在一起时的链接。注意,在进行非压缩代码和压缩代码的整合时,压缩代码部分是作为数据进入整个映像的,所以不会对其进行重新链接。对压缩代码的链接,实际上是在代码被压缩之前完成的,完成代码的链接后,生成特定格式的目标文件(如ELF
或者COFF),为了在解压缩后可以直接执行,首先必须将其转成二进制可执行文件,通过objcopy函数完成此项功能,此后对生成的二进制可执行文件调用deflate函数进行压缩,由于需要将压缩后的代码最后整合到整个映像中,故压缩后的文件还需要通过binToAsm
工具进行转换,转成一个汇编源文件,该文件将压缩后的二进制代码作为数据部分进行保存,从而避免在与非压缩代码最后进行二次链接时被修改。
两步链接过程中各自指定了不同的链接地址,对于压缩代码而言,其分为两种情况,对于BootRom,压缩代码被链接到了RAM_HIGH_ADRS地址处,而对于VxWorks_rom,则被链接到了RAM_LOW_ADRS 地址处,在与非压缩代码进行整合链接时指定的链接地址(即_romInit函数地址)与压缩代码链接时指定的地址相对应:如果压缩代码为RAM_HIGH_ADRS,则最后整合时就为RAM_LOW_ADRS;如果压缩代码为RAM_LOW
_ADRS,则整合时就为RAM_HIGH_ADRS。
VxWorks 操作系统内存布局的更多相关文章
- C++ 系列:内存布局
转载自http://www.cnblogs.com/skynet/archive/2011/03/07/1975479.html 为什么需要知道C/C++的内存布局和在哪可以可以找到想要的数据?知道内 ...
- Linux 内存布局
本文主要简介在X86体系结构下和在ARM体系结构下,Linux内存布局的概况,力求简单明了,不过多深入概念,多以图示的方式来记忆理解,一图胜万言. Technorati 标签: 内存 布局 ...
- linux系统进程的内存布局
内存管理模块是操作系统的心脏:它对应用程序和系统管理非常重要.今后的几篇文章中,我将着眼于实际的内存问题,但也不避讳其中的技术内幕.由于不少概念是通用的,所以文中大部分例子取自32位x86平台的Lin ...
- C语言程序内存布局
C语言程序内存布局 如有转载,请注明出处:http://blog.csdn.net/embedded_sky/article/details/44457453 作者:super_bert@csdn 一 ...
- C/C++内存布局及对齐
1.源文件转换为可执行文件 源文件经过以下几步生成可执行文件: 1.预处理(preprocessor):对#include.#define.#ifdef/#endif.#ifndef/#endif等进 ...
- Anatomy of a Program in Memory.剖析程序的内存布局
原文标题:Anatomy of a Program in Memory 原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译 ...
- 内存对齐与ANSI C中struct型数据的内存布局 【转】
转自:http://blog.chinaunix.net/uid-25909619-id-3032209.html 当在C中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将 ...
- UNIX高级环境编程(8)进程环境(Process Environment)- 进程的启动和退出、内存布局、环境变量列表
在学习进程控制相关知识之前,我们需要了解一个单进程的运行环境. 本章我们将了解一下的内容: 程序运行时,main函数是如何被调用的: 命令行参数是如何被传入到程序中的: 一个典型的内存布局是怎样的: ...
- Linux内存初始化(三) 内存布局
一.前言 同样的,本文是内存初始化文章的一份补充文档,希望能够通过这样的一份文档,细致的展示在初始化阶段,Linux 4.4.6内核如何从device tree中提取信息,完成内存布局的任务.具体的c ...
随机推荐
- hexo 博客支持PWA和压缩博文
目标网站 https://blog.rmiao.top/ PWA yarn add hexo-offline 然后在root config.yml里新增 # offline config passed ...
- CORS跨域请求之简单请求与非简单请求
先来看一个例子 定义server01的项目,在路由表中添加一条路由记录 url(r'^getData.html$',views.get_data) 对应的视图函数 from django.shortc ...
- BZOJ 4318: OSU! [DP 概率]
传送门 题意:变成了告诉每个操作的成功概率,并且得分是三次方 一样....分别维护$x,\ x^2,\ x^3$的期望就行了 注意$x^3$是我们最终求的得分,即使失败得分也要累加上之前的 #incl ...
- canvas绘制时钟及注释及save和restore的用法
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- CentOS上安装Git服务器
1.安装Git 打开控制台,执行以下命令进行安装 $ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel ...
- Spring Task定时任务Scheduled
Spring的任务调度,采用注解的形式 Spring中@Scheduled的用法. spring的配置文件如下,先扫描到任务的类,打开spirng任务的标签 <beans xmlns=" ...
- grep命令的-P选项
man grep的时候有一个-P,文档上的英文: -P, --perl-regexp Interpret PATTERN as a Perl regular expression. This is ...
- Angular2 ^ 资源链接
Angular2 资源链接 Material Desgin 2 githubhttps://github.com/Promact/md2 DEMOhttp://code.promactinfo.co ...
- CENTOS6.6 下mysql MHA架构搭建
本文来自我的github pages博客http://galengao.github.io/ 即www.gaohuirong.cn 摘要: 本篇是自己搭建的一篇mysql MHA文章 前面的安装步骤基 ...
- mybatis自动生成mapper,dao映射文件
利用Mybatis-Generator来帮我们自动生成mapper.xml文件,dao文件,model文件. 1.所需文件 关于Mybatis-Generator的下载可以到这个地址:https:// ...