GNU LD - LMA和VMA

阅读数:12 评论数:0

跳转到新版页面

分类

Linux

正文

基础知识

    从源代码到程序的执行,一般要经历几个过程:

源代码编辑-》编译-》链接-》装载-》执行

 

两种处理器架构

1、冯诺依曼结构

    是指程序和数据存储空间并不分开,而是在一块存储器里面,所以程序和数据的访问位宽是相等的。

2、哈佛结构

    是指程序和数据存储空间是分开的,各自有一块存储器,所以程序和数据的访问位宽可以不相等。

LMA和VMA

    LMA就是load address,也就是加载地址,VMA就是virtual address,也就是运行地址。对于一个可执行文件bin,程序和数据都会按顺序存储在里面,LMA就是程序和数据在bin文件中的存储地址,程序运行时,从bin文件的存储地址复制到RAM中的地址就是VMA。

    程序要运行,就需要从硬盘加载到内存,放在内存哪里呢?就是LMA,详细点就是把其中的.text代码段,.data段数据等copy到LMA地址处。

    如果是普通PC电脑,那么LMA和VMA是一样的,也就是,程序被加载到存在的什么地方,也就在什么地方运行。

    如果是嵌入式系统,LMA和VMA不一样,而其中最常见的一种情况就是程序被放到ROM中,比如设置 为只读的Nor Flash中,此时LMA就是Nor Flash的地址,而程序运行在内存中,VMA就是内存的地址,而不是Nor Flash的址。