我想知道,为什么我们总是必须禁用位于协处理器寄存器 cp15 c3 中的域访问控制寄存器中的所有域。这通常是在启动代码中通过如下方式完成的,使用MCR http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344h/BCGFFBFD.html操作说明。
MVN r1, #0
MCR p15, 0, r1, c3, c0, 0
为什么我们将所有零加载到 c3 中以禁用所有domains http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0211i/I1039311.html?
您当然不必在域访问控制寄存器中禁用域。实际上,这甚至是不可能的,因为如果启用了 MMU,则始终会检查域访问。通过将值加载到 DACR,您真正要做的是设置域的访问权限。The page http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0211i/I1039311.html您发布了一个链接来描述 DACS 中位的确切含义。一般来说:
-
00- 根本无法访问
-
01- 访问TLB条目中再次检查的值
-
11- 始终允许访问
这意味着向 DACR 写入 0xFFFFFFFF 会关闭内存保护。这正是您发布的代码的作用。通知说明mvn
,它不同于mov
. mvn <Rd>, <Rm>
是“Move NOT”指令,它写入的补码<Rm>
to <Rd>
. After mvn r1, #0
的价值r1
等于 0xFFFFFFFF。
您遇到的启动代码可能不需要内存保护,或者暂时关闭它以便稍后启用它。然而,并不是任何规则都要求您始终启用对所有域的完全访问权限。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)