ARM中的链接地址(为什么ARM要重定位)?
来源:互联网 发布:netstat查看指定端口 编辑:程序博客网 时间:2024/05/22 16:44
在考虑为什么要重定位的问题之前,我们首先要明白一下几点:
1. 链接地址的定义:我自己理解是,程序被定义的开始执行的内存地址。
2. 当ARM从nandflash启动的时候,CPU所做的工作是将nandflash中的前8K代码自动的复制到6410的0地址(即Stepping Stone)中去,然后从0地址开始执行程序。
3. 程序在执行过程中,用链接地址来访问全局变量。全局变量一般被存放于程序的最后面。
在程序超过8K时,如果不进行重定位,就会发生类似于下面的访问错误,这将导致程序无法正常执行。
假设我们定义程序的链接地址为0x50000000,程序从6410的0地址(即Stepping Stone)执行的时候,如果要访问某个全局变量时,假设其反汇编代码如下:
500000a4 e59f303c ldr r0, [pc, #60] ;r0 = [0x500000e8] =0x00000200
500000a8 e5933000 ldr r0, [r0] ;r0 = [0x00000200]
500000ac ......
......
500000e8 00000200 .......
00000200 <i>:
200: 00000000 ......
我们可以看出来,r0的值要根据地址0x500000e8处获得,而在Stepping Stone中无法找到0x500000e8这个地址,这样程序就会出错。所以在程序被CPU拷贝到Stepping Stone后,我们要先写一段程序初始化nandflash和内存,再利用位置无关的代码将程序从nandflash拷贝到内存中,然后跳转到其它函数继续执行,这就是ARM的重定位。
*****************************************************************************************************************************************************************************************
以上纯属个人观点,有错误的地方还请大侠们指正!谢谢!
- ARM中的链接地址(为什么ARM要重定位)?
- 1.1 关于ARM中重定位:位置有关码和位置无关码及运行地址和链接地址
- 六.ARM裸机学习之重定位和链接脚本
- ARM地址重映射
- ARM地址重映射
- 链接--地址重定位
- ARM remap与重定位
- arm mmu地址重映射
- ARM地址重映射机制
- arm 存储器地址重映射
- ARM地址重映射机制
- ARM地址重映射机制
- ARM链接地址和烧写地址
- ARM 链接地址和烧写地址
- ARM remap与重定位摘抄
- ARM remap与重定位摘抄
- ARM remap与重定位摘抄【转贴】
- ARM remap与重定位摘抄
- android OTA 简介
- excel创建服务失败处理办法
- 报文解析各协议结构体
- Windows 平台搭建安卓开发环境
- 如何使用Model View delegate自定义列表
- ARM中的链接地址(为什么ARM要重定位)?
- day 6 list
- 疯狂Java程序员的基本修养
- 黑马程序员-DOM读书笔记
- XML与Java类映射JAXB
- Apache与Nginx的优缺点比较
- linux trap命令
- C程序设计(第四版)谭浩强
- 《循序渐进Linux》第四章 Linux常用命令及其使用