2012年5月7日月曜日

MMU有効化

ページテーブルのフォーマットがわかったのでMMUを有効化してみる
有効化はコプロセッサ操作で行う。


MMUを有効化するコプロセッサレジスタはCP15レジスタC1 Control Register
Cortex-A8 Technical Reference Manualの122ページ 3.2.25 c1, Control Register参照

■CP15 C1 Control Registerフォーマット


31   30     29     28      27    26    25  24                     13 12 11 10        2    1   0
+---------------------------------------------------------------------+
| 0 | TE | AFE | TRE | NMFI |  0  | EE |            0          | V | I | Z |    0    | C | A | M |
+---------------------------------------------------------------------+

MMUを有効化する場合はTTBRレジスタにページテーブルの物理アドレスを指定した状態でCP15 C1レジスタのMビットを1にする。

コプロセッサの値変更はアセンブラコプロセッサ命令を使用する


■コプロセッサレジスタ値取得

unsigned long value;

asm("mrc p15, 0, %0, c1, c0, 0" : "=r"(value));


■コプロセッサレジスタ値設定
unsigned long value = 設定値;

asm("mcr p15, 0, %0, c1, c0, 0;" : : "r"(value));


■MMU有効化

unsigned long value;
asm("mrc p15, 0, %0, c1, c0, 0" : "=r"(value));

value |= 1;

asm("mcr p15, 0, %0, c1, c0, 0;" : : "r"(value));

0 件のコメント:

コメントを投稿