2012-03-05 4 views
2

저는 왜 항상 코 프로세서 레지스터 cp15 c3에있는 도메인 액세스 제어 레지스터의 모든 도메인을 비활성화해야하는지 궁금합니다. 이것은 대개 시작 코드에서 MCR 명령어를 사용하여 아래와 같이 수행됩니다. 모든 domains을 사용하지ARM - 도메인 액세스 제어 레지스터

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

왜 우리는 C3에 모두 0을로드 할 수 있습니까?

답변

3

도메인 액세스 제어 레지스터에서 도메인을 비활성화 할 필요는 없습니다. MMU가 활성화되어 있으면 도메인 액세스가 항상 확인되기 때문에 사실 불가능합니다. DACR에 값을로드하여 실제로 수행하는 작업은 도메인에 대한 액세스 권한을 설정하는 것입니다. The page에 링크를 게시하면 DACS의 비트 의미를 정확하게 설명합니다. 일반적으로 :

  • 00 - 모든
  • 01에 액세스 할 수 없음 - 액세스 항상을 writting을 의미

을 허용 - 액세스는

  • 11 TLB 엔트리에 전년도 값을 확인 DACR에 0xFFFFFFFF는 메모리 보호를 해제합니다. 바로 당신이 게시 한 코드가하는 것입니다. 통지 지침 mvn, mov과 다른 것입니다. mvn <Rd>, <Rm>은 "Move NOT"명령이고, <Rm>의 보수는 <Rd>에 씁니다. mvn r1, #0 값이 r1이면 0xFFFFFFFF와 같습니다.

    발생한 시작 코드는 나중에 메모리 보호를 필요로하지 않거나 일시적으로 해제하여 나중에 다시 사용하도록 설정합니다. 그럼에도 불구하고 항상 모든 도메인에 대한 전체 액세스를 가능하게하는 것은 모든 종류의 규칙이 아닙니다.

  • +0

    나는 정말로 엉성함을 느껴서 MVN 대신 MOV 명령이 있다고 생각했습니다. 고마워,이 일은 나를 위해 밖으로 지 웁니다. – 71GA