ページテーブルのフォーマットがわかったので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 件のコメント:
コメントを投稿