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

最近研究 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 时, 需要有一个重叠映射的地址空间。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值