首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使MMU能够在ARM Cortex-A上使用的问题

使MMU能够在ARM Cortex-A上使用的问题
EN

Stack Overflow用户
提问于 2014-04-27 20:16:36
回答 1查看 2.6K关注 0票数 1

我正试图在手臂上启用MMU -A9(在QEMU中)。我所有的代码和数据都在内存的第一个MB中,所以我相信一个L1“节”条目就足以建立一个覆盖我所需要的所有内存的标识映射。下面是我要走的步骤:

在address 0x16000上创建一个带有0x00000c02值的0x00000c02条目( L1条目格式的文档在ARM架构参考手册节B3.5中--仅作为PDF提供,因此我不能直接链接)。L1表中的所有其他条目都是零的。

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

代码语言:javascript
复制
ldr r0, =masterTranslationTable
mcr p15, 0, r0, c2, c0, 0

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

代码语言:javascript
复制
  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:

代码语言:javascript
复制
  mrc p15, 0, r0, c1, c0, 0
  orr r0, r0, #1
  mcr p15, 0, r0, c1, c0, 0

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-28 21:53:44

翻译表必须在16k的边界上对齐。试试0x14000或0x18000。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23328471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档