现在的位置: 首页 > 综合 > 正文

关于 bootloader 里的物理地址到虚拟地址的影射

2013年06月12日 ⁄ 综合 ⁄ 共 493字 ⁄ 字号 评论关闭

最近研究 OBM, OBM 里为了支持中断, 需要把中断入口放在 0 地址, 但是 pxa 平台 DDR 内存物理地址在 0x80000000, 怎么办呢? 使用虚拟地址!

 

简单研究了一下 OBM 物理地址到虚拟地址的转换过程。比较有意思。 这里简单介绍一下。

 

Pxa  平台有内置 SRAM  (这里称为 A 地址空间),对应物理地址 0x5c013000, 以及 外置 DDR RAM(这里称为 B 地址空间), 对应地址 0x80000000. 于是, OBM A 地址映射到同样的虚拟地址:0x5c0130000, 而将 B 地址映射到 0x0虚拟地址。

 

物理地址

虚拟地址

A地址空间

0x5c013000

0x5c013000

B地址空间

0x80000000

0

 

一开始, OBM 代码存在于 A 地址, OBM 在地址映射后, 将自己拷贝到 B 物理地址, 然后打开 MMU, 再跳转到 B 虚拟地址。

 

然后就一直在虚拟地址中执行。。。

 

OBM 要运行下一个 IMAGE 时, 需要退出虚拟地址, 这时, 它会拷贝一段代码到 A 地址, 然后跳转到 A 地址执行拷贝过去的代码。 该代码会关闭 MMU 并跳转到下一个 IMAGE

 

就像设计模式一样, 这里也应该是一个模式: 打开 MMU 时, 需要有一个重叠映射的地址空间。

抱歉!评论已关闭.