ARM - Регистр контроля доступа к домену - PullRequest
2 голосов
/ 05 марта 2012

Интересно, почему мы всегда должны отключать все домены в Регистре контроля доступа к доменам, расположенном в регистре сопроцессора cp15 c3.Обычно это делается в коде запуска, как показано ниже, используя инструкцию MCR .

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

Почему мы загружаем все нули в c3, чтобы отключить все домены ?

1 Ответ

3 голосов
/ 05 марта 2012

Вам, конечно, не нужно отключать домены в реестре контроля доступа к домену. На самом деле это даже невозможно, так как доступ к домену всегда проверяется, если MMU включен. Что вы действительно делаете, загружая значения в DACR, так это устанавливаете права доступа для доменов. На странице вы разместили ссылку, чтобы точно описать значение битов в DACS. В общем:

  • 00 - нет доступа вообще
  • 01 - доступ проверен против значений в записи TLB
  • 11 - доступ всегда разрешен

Это означает, что запись 0xFFFFFFFF в DACR отключает защиту памяти. Это именно то, что делает код, который вы опубликовали. Обратите внимание на инструкцию mvn, она отличается от mov. mvn <Rd>, <Rm> - это инструкция "Move NOT", она записывает дополнение от <Rm> до <Rd>. После mvn r1, #0 значение r1 равно 0xFFFFFFFF.

Код запуска, с которым вы столкнулись, вероятно, не нуждается в защите памяти или временно отключает его, чтобы включить его позже. Тем не менее, это не какое-либо правило, согласно которому вы всегда должны разрешать полный доступ ко всем доменам.

...