2012-03-05 103 views
2

我在想,爲什麼我們總是要關閉位於協處理器寄存器CP15 C3在域訪問控制寄存器的所有域。這通常使用MCR指令通過類似下面的東西在啓動代碼中完成。ARM - 域訪問控制寄存器

MVN r1, #0 
MCR p15, 0, r1, c3, c0, 0 

爲什麼我們將所有的零加載到c3中以禁用所有的domains

回答

3

你肯定不會在域訪問控制寄存器來禁用域。實際上,這是不可能的,因爲如果MMU被啓用,域訪問總是被檢查。通過將值加載到DACR,你真正做的是設置域的訪問權限。 The page您發佈了一個鏈接來描述DACS中位的確切含義。一般來說:

  • - 在所有
  • 沒有訪問 - 訪問簽入的TLB項agains值
  • - 訪問總是允許

這意味着書面方式DACR的0xFFFFFFFF關閉內存保護。這正是你發佈的代碼所做的。通知指令mvn,它是東西比mov不同。 mvn <Rd>, <Rm>是「不移動」指令,它寫的<Rm>補充<Rd>。經過r1mvn r1, #0值等於0xFFFFFFFF的。

你遇到可能並不需要內存保護或暫時只將其關閉稍後啓用它的啓動代碼。儘管如此,您應該始終能夠完全訪問所有域名,而不是任何一種規則。

+0

我真的很sl and,認爲有一個'MOV'命令,而不是'MVN'。謝謝,這爲我清除了一些東西。 – 71GA 2012-03-05 17:08:59