You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ARM Cortex-A72地址转换排障:L1/L2转换与寄存器分析求助

ARM Cortex-A72 地址转换流程求助

已知虚拟-物理地址对应关系

  • Virtual_1 = 0xc7c01000, Physical_1 = 0x09170000
  • Virtual_2 = 0xc7c11000, Physical_2 = 0x0916E000
  • Virtual_3 = 0x01060000, Physical_3 = 0x101F1000

相关寄存器值

TTBR0_EL1        0x3000095c92000   844427443118080
TTBR1_EL1        0x0               0
TTBR0_EL2        0x0               0
TCR_EL1          0x80003500        2147497216
TCR_EL2          0x0               0
VTCR_EL2         0x0               0
SCTLR            0x10c51905        281352453
SCTLR_EL2        0x0               0
MAIR_EL1         0xffbb00          16759552
ID_AA64MMFR0_EL1 0x1124            4388

问题描述

参照ARM官方文档尝试计算虚拟地址到物理地址的转换流程,但未成功:

  • 按一级地址转换规范执行时,虚拟地址前19位与物理地址前19位不匹配,且无法访问一级描述符地址,怀疑未启用一级转换。
  • 假设启用二级地址转换,执行流程同样失败,无法访问一级描述符地址,进而无法获取二级描述符地址、二级表基地址及小页基地址。GDB调试信息如下:
(gdb) x/4x 0x95c931f0
0x95c931f0: Cannot access memory at address 0x95c931f0

待解答问题

  1. 当前使用的是一级地址转换还是二级地址转换?如何通过寄存器值判定?
  2. 一级表与二级表的地址位于何处?
  3. 地址转换的具体执行流程是怎样的?
  4. 如何实现虚拟地址与物理地址的相互转换?

补充信息

  • Bootloader及应用程序在QEMU中运行,无法使用硬件调试器,仅通过GDB调试。

编辑1:RAM导出分析推论

从物理RAM起始地址导出全部RAM并分析后,得出以下推论:

  1. Virtual_1、Virtual_2、Virtual_3地址在RAM中位于两个不同偏移地址处。
  2. Physical_1地址在RAM中位于三个不同偏移地址处,Physical_2地址位于两个不同偏移地址处,Physical_3地址不在RAM中。
  3. Virtual_1与Virtual_2对应的物理地址在RAM中位于以0x4aXXX开头的连续偏移地址处:
00 01 02 03 04 05 06 07 
Ex: 0x95c40000 + 0x4A0A4 -> 00 10 c0 c7 00 00 17 09
                            0xc7c01000  0x09170000
  1. Virtual_1、Virtual_2、Virtual_3地址在RAM中位于以0x56fXX开头的连续偏移地址处:
Bytes   -> 00 01 02 03 04 05 06 07 
Ex: 0x95c40000 + 0x56f08 -> 00 10 c1 c7 00 10 c0 c7 
                 Hex     -> 0xc7c11000  0xc7c01000
                            
                            08 09 0a 0b 0c 0d 0e 0f 
                            00 00 00 00 00 00 00 00
                            0x00000000  0x00000000
                       
                            00 01 02 03 04 05 06 07
                            01 00 06 01 00 00 06 01
                            0x01060001  0x1060000

虚拟/物理地址在RAM中的位置

Virtual_1   = 0xc7c01000
Physical_1  = 0x9170000
MemVirt     = 0x95C40000 + 0x4a0a4 / 0x56f0c
MemPhy      = 0x95C40000 + 0x4a0a8 / 0x4a0b8 / 0x4cba8

Virtual_2   = 0xc7c11000
Physical_2  = 0x916E000
MemVirt_2   = 0x95C40000 + 0x4a174 / 0x56f08
MemPhy_2    = 0x95C40000 + 0x4a178 / 0x4a188

Virtual_3   = 0x1060000
Physical_3  = 0x101F1000
MemVirt_3   = 0x95C40000 + 0x4a00c / 0x56f18
MemPhy_3    = ?

内容的提问来源于stack exchange,提问作者Purgoufr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 23:32:03