在ARM Cortex-A上启用MMU的问题



我正试图在ARM Cortex-A9(在QEMU中)上启用MMU。我所有的代码和数据都在第一MB的内存中,所以我相信一个L1"部分"条目就足以建立一个覆盖我所需所有内存的标识映射。以下是我要执行的步骤:

在地址0x16000创建一个值为0x00000c02的L1条目(L1条目格式的文档在ARM体系结构参考手册B3.5节中-仅以PDF格式提供,因此我无法直接链接)。L1表中的所有其他条目均为零。

将TTRB0设置为0x16000(我已检查TTBCR.N为0):

ldr r0, =masterTranslationTable
mcr p15, 0, r0, c2, c0, 0

禁用I和D缓存,使TLB无效,将域访问控制寄存器(DACR)设置为全1(这将禁用所有域的权限检查):

  MRC p15, 0, r1, c1, c0, 0
  BIC r1, r1, #(0x1 << 12)     @ Disable Instruction cache
  BIC r1, r1, #(0x1 << 2)      @ Disable Data cache
  MCR p15, 0, r1, c1, c0, 0    
  mcr p15, 0, r1, c8, c7, 0    @ Invalidate TLB
  mov r0, #0xffffffff
  mcr p15, 0, r0, c3, c0, 0    @ Set DACR to all "manager" - no permissions checking

启用MMU:

  mrc p15, 0, r0, c1, c0, 0
  orr r0, r0, #1
  mcr p15, 0, r0, c1, c0, 0

但在MMU启用后,我立即得到预取中止,调试器无法访问任何内存。有人能看到我缺了什么吗?

转换表必须在16k边界上对齐。尝试0x14000或0x18000。

相关内容

  • 没有找到相关文章

最新更新