rpi_start.Sを読む (第9回)
2013/11/10(日) 11:01 NetBSD はてブ情報 はてブに登録 はてブ数

今回読むのは次の部分です。
    186 	.unreq	va
    187 	.unreq	pa
    188 	.unreq	n_sec
    189 	.unreq	attr
    190 	.unreq	itable
    191 	.unreq	l1table
    192 	.unreq	l1sfrm
これは、157行目からの
    157 	l1table	.req r0
    158 	va	.req r1
    159 	pa	.req r2
    160 	n_sec	.req r3
    161 	attr	.req r4
    162 	itable	.req r5
    163 	l1sfrm	.req r6
に対して、反対のことをしているわけですね。

これで終わりです。だと面白くないので、ちょっと振り返ってみましょう。

第6回から第8回までは、第3回でゼロに初期化したL1テーブルを設定する一連の処理でした。

処理は、
  • mmu_init_tableに設定された三つのva, pa, n_sec, attrによるループ
  • n_secによるループ
という二重ループから構成されていました。

mmu_init_tableは、次のようなテーブルでした。
vapansecattr
0x00x00x6430330x412
0xC00000000x00x6430330x041E
0xF20000000x200000000x010FFFFF0x0412
これが、L1テーブルに格納されるころには次のようになり、
vapan_sec
0x00000x000004120x06
0x20000x0000041E0x06
0x3C800x200004120x10
L1テーブルは次のように設定されたということになります。
L1 offsetL1 entry
00000x00000412
00040x00000412
00080x00000412
000C0x00000412
00100x00000412
00140x00000412
00180x00000000
001C0x00000000
(中略)
1FF80x00000000
1FFC0x00000000
20000x0000041E
20040x0000041E
20080x0000041E
200C0x0000041E
20100x0000041E
20140x0000041E
20180x00000000
201C0x00000000
(中略)
3C780x00000000
3C7C0x00000000
3C800x20000412
3C840x20000412
3C880x20000412
3C8C0x20000412
3C900x20000412
3C940x20000412
3C980x20000412
3C9C0x20000412
3CA00x20000412
3CA40x20000412
3CA80x20000412
3CAC0x20000412
3CB00x20000412
3CB40x20000412
3CB80x20000412
3CBC0x20000412
3CC00x00000000
3CC40x00000000
(以下略)

名前:  非公開コメント   

  • TB-URL  http://www.tokuda.net/diary/0811/tb/