ARM - 域访问控制寄存器

3
我想知道为什么我们总是需要在协处理器寄存器cp15 c3中的域访问控制寄存器中禁用所有域。通常,通过类似下面的启动代码使用MCR指令来完成此操作。
MVN   r1, #0
MCR   p15, 0, r1, c3, c0, 0

为什么我们要将所有零加载到c3中以禁用所有域名

1个回答

3
你肯定不需要在域访问控制寄存器中禁用域名。实际上,这甚至是不可能的,因为如果MMU被启用,则总是检查域访问。通过加载值到DACR,您真正做的是设置域的访问权限。您发布链接的页面准确描述了DACR中位的意义。一般来说:
00 - 完全没有访问权限 01 - 访问根据TLB条目中的值进行检查 11 - 总是允许访问
这意味着将0xFFFFFFFF写入DACR将关闭内存保护。这正是您发布的代码所做的事情。请注意指令“mvn”,它与“mov”有所不同。“mvn <Rd>, <Rm>”是“Move NOT”指令,它将<Rm>的补码写入<Rd>。在执行“mvn r1, #0”后,r1的值等于0xFFFFFFFF。
您发现的启动代码可能不需要内存保护,或者仅暂时关闭它以后重新启用。然而,并不是规定您应该始终启用对所有域的完全访问。

我非常粗心,认为有一个MOV命令而不是MVN。谢谢,这让我明白了。 - 71GA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接