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

Arm64 QEMU启用MMU后触发预取中止,无法访问地址求助

Arm64 EL1 MMU平映射启用时预取中止问题排查求助

背景与已完成配置

  • 当前在Arm64架构EL1级别配置页表,最终目标为文本、栈、数据、只读数据设置不同访问权限并启用MTE,目前卡在平映射启用MMU的阶段。
  • 采用newlib的CRT0,执行流程:CRT0调用test.S中的_cpu_init_hook → 进入main函数 → 调用mmu.c中的setup_mmu()。
  • _cpu_init_hook已完成操作:禁用核心0以外的其他核心、确保处于EL1级别、启用FP寄存器访问、设置中断向量。

页表配置细节

  • 页表采用64kB颗粒大小、两级结构(Level2 + Level3),Level2页表指向由add_pgtbl_entries()生成的Level3表项。
  • 已为0x40000000至0x4008FFFF的内存范围生成9个Level3表项,所有页面均配置为RWX权限。

问题现象

  • 写入sctlr_el1启用MMU后,立即触发异常,无法执行下一条isb指令。
  • 相关指令流:
0x0000000040001db4 <+276>:  msr sctlr_el1, x1
0x0000000040001db8 <+280>:  isb
  • 编译带DEBUG_TLB的QEMU验证后,确认异常为0x40001db8地址处的预取中止,ESR值为0x21/0x86000006。
  • 尝试调整过部分位域,但因架构复杂性无法定位问题,恳请提供排查思路。已准备最小可复现示例代码(test.S、mmu.c、Makefile)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 10:45:33