从0学ARM——什么是位置无关码?
从0学ARM——什么是位置无关码?一、为什么需要位置无关码?首先我们需要了解一下ARM板子的启动流程。1. exynos 4412启动流程首先看一下 exynos 4412 mem
一、为什么需要位置无关码?
首先我们需要了解一下ARM板子的启动流程。
1. exynos 4412启动流程首先看一下 exynos 4412 memory map :
可知:iROM基地址是0x00000000iRAM基地址是0x02020000
这两块内存都在 SOC中。
查看exynos 4412 Booting Sequence:
位于第五章。
上图是exynos4412上电复位时的启动流程,大致如下:
<1>执行内部只读存储器iROM中的一段代码(厂家固化在里面的),这段代码主要是初始化一些系统的基本配置,比如初步时钟配置、堆栈、启动模式(对应图中的标志①)。
<2>iROM中的代码根据阶段一获取的启动模式(OM_STAT寄存器),从相应的存储介质中拷贝BL1镜像到内部静态随机存储器SRAM,BL1主要是完善系统时钟的初始化工作、内存控制器一些时序的配置。做完这些工作后把OS镜像拷贝到内存中(对应图中标志②③)。
<3>跳转到OS中执行。
SRAM只有256KB,而uboot镜像一般是超过这个大小的,也就是说它不能把完整的uboot镜像拷贝到SRAM中,因此,推测这里的拷贝方式应该还是:「BL1拷贝的仅仅是uboot的一部分」,这一部分除了能设置好基本的硬件运行环境外,「还能把其自身(uboot镜像)完整的拷贝到内存中」,然后uboot在内存中运行,完成OS镜像的拷贝和引导
一般情况下两者的地址并不相同,程序在DRAM中的地址重定位过程必须由程序员来完成。
这样就有了「位置无关代码」的概念,指代码不在连接时指定的运行地址空间,也可以执行,它一段加载到任意地址空间都能执行的特殊代码。
uboot搬移到DRAM中,然后跳转到DRAM继续运行uboot剩下的代码,那么在搬移之前的这段代码必须是位置无关,而且不能使用绝对寻址指令,否则寻址就会出错。
3 首页 下一页 上一页 尾页-
凭什么稳居中型SUV细分市场销量头部位置?别克昂科威S实用性测评2021-01-08
-
科瑞技术搭上宁德时代快车,满产运行2021-01-06
-
新疆木垒3.6级地震 电网运行正常2021-01-04
-
国家能源局督促电网企业优化运行方式2020-12-19
-
云与智能的融合已经成为共识,百度用“云智一体”坐定头羊位置2020-12-17
-
什么是机器人的力控制?有力控制后还需要位置控制吗?2020-12-07
-
美国俄克拉荷马大学3D打印低成本气象站,已稳定运行5个月2020-11-26
-
2020年三季度机床工具行业经济运行情况及其运行特点分析2020-11-25
-
华为机器视觉,今年能登上安防前三的位置吗?2020-11-18
-
国家政务服务平台快应用上线试运行2020-11-18
-
新MacBook运行iOS应用体验结果报告2020-11-18
-
10月11日零时起,全国铁路将实施第四季度列车运行图2020-10-12
-
买前必备,买后落灰,烤箱在家里到底是什么位置?2020-10-10
-
用大数据为医保基金平稳运行筑起护城河2020-10-09
-
世界各地工厂中运行的工业机器人数量达创纪录水平2020-09-30