我想知道,为什么我们总是必须禁用位于协处理器寄存器cp15 c3中的域访问控制寄存器中的所有域。这通常使用MCR指令通过下面的内容在启动代码中完成。
MVN r1, #0
MCR p15, 0, r1, c3, c0, 0
为什么我们将所有零加载到c3中以禁用所有domains?
答案 0 :(得分:3)
您当然不必禁用域访问控制寄存器中的域。实际上,甚至不可能,因为如果启用MMU,则始终检查域访问。通过将值加载到DACR,您真正要做的是设置域的访问权限。 The page您发布了一个链接,用于描述DACS中位的确切含义。一般来说:
这意味着向DACR写入0xFFFFFFFF会关闭内存保护。这正是您发布的代码所做的。注意说明mvn
,它与mov
不同。 mvn <Rd>, <Rm>
是“移动NOT”指令,它将<Rm>
的补充写入<Rd>
。 mvn r1, #0
r1
之后的值等于0xFFFFFFFF。
您遇到的启动代码可能不需要内存保护或暂时关闭它只是为了以后启用它。然而,您应该始终启用对所有域的完全访问权限,这不是任何规则。