2009-06-25 STR8132その4
割り込みまわりとcomとtimer入りのkernelはビルドできるようになった。まだ動かないけど。
めんどくさいからとりあえずメモリ32Mあるうちの16Mbyte目、0x21000000 にロードして VA=PA でマッピングして
go すりゃいいやと思ってたら、
みたいにしないとだめっぽいなあ。特にI/Oアドレス空間。
少くともSTR81xx/STR91xx みたいにメモリ空間の大半を占有してしまうようなレイアウトを、もっと狭くマッピングしなおしてやらないとダメっぽ。
そういえば最初に見た linux のパッチもそんなことしてたような、と思って見てみたら、確かに
として 0x12345678 を 0xf1235678 にマッピングしなおしていた。こいつかー。
§ § §
メインメモリ32Mbyteのうち、メモリの頭(0x20000000)から15Mbyte(!)をU-Bootが使っていて、
ここにloadしてしまうとloadした瞬間にU-Bootが落ちてしまう。
netbsd.bin を 0x21000000 にロードして、こんな感じにすればいいのかな。
0x21000000あるいは任意の場所にロードした後、割り禁にして自分自身を0x20000000にコピーして0x20000000から実行、のほうがレイアウト的には綺麗だしcopyしてjumpまでをrelocatableに書いとけばどこにロードしても動くので汎用性がありそうだが…。
つーか evbarm で KERNEL_BASE_PHYS が $xx200000 になってるやつがいくつかあるけど、前半2Mbyteは放置してるんだろうか、それとも使ってはいけない領域だから触ってないだけなんだろうか。2MbyteもMOTTAINAI!
ちゃんと使い切ってるようには見えないが…
次は evbarm/star/star_machdep.c と evbarm/star/star_starup.S あたりを。
めんどくさいからとりあえずメモリ32Mあるうちの16Mbyte目、0x21000000 にロードして VA=PA でマッピングして
go すりゃいいやと思ってたら、
kernel text 0xC0000000 〜 0xC1FFFFFF kernel vm 0xC1000000 〜 0xCFFFFFFF I/O, SoC regs 0xF0000000 〜 0xFFFFFFFF
みたいにしないとだめっぽいなあ。特にI/Oアドレス空間。
少くともSTR81xx/STR91xx みたいにメモリ空間の大半を占有してしまうようなレイアウトを、もっと狭くマッピングしなおしてやらないとダメっぽ。
そういえば最初に見た linux のパッチもそんなことしてたような、と思って見てみたら、確かに
#define IO_BASE 0xF0000000 #define IO_ADDRESS(x) (((x >> 4) & 0xffff0000) + (x & 0xffff) + IO_BASE)
として 0x12345678 を 0xf1235678 にマッピングしなおしていた。こいつかー。
§ § §
メインメモリ32Mbyteのうち、メモリの頭(0x20000000)から15Mbyte(!)をU-Bootが使っていて、
ここにloadしてしまうとloadした瞬間にU-Bootが落ちてしまう。
netbsd.bin を 0x21000000 にロードして、こんな感じにすればいいのかな。
Physical Addr ------- ----------------------- FLASH 0x10000000 → mapped I/O (0xF1000000〜? 空間足りる?) SoC reg 0x18000000 → mapped I/O (0xF1800000〜) RAM 0x20000000 (U-Boot) → VM RAM 0x20F00000 → VM RAM 0x21000000 → KERNEL_TEXT(0xC0000000) + VM + msgbuf RAM end 0x22000000 SoC reg 0x30000000 → mapped I/O (0xF3000000〜) SoC reg : → mapped I/O (0xFx000000〜) SoC reg 0xFFFFFFFF → mapped I/O (0xFF000000〜)
0x21000000あるいは任意の場所にロードした後、割り禁にして自分自身を0x20000000にコピーして0x20000000から実行、のほうがレイアウト的には綺麗だしcopyしてjumpまでをrelocatableに書いとけばどこにロードしても動くので汎用性がありそうだが…。
つーか evbarm で KERNEL_BASE_PHYS が $xx200000 になってるやつがいくつかあるけど、前半2Mbyteは放置してるんだろうか、それとも使ってはいけない領域だから触ってないだけなんだろうか。2MbyteもMOTTAINAI!
ちゃんと使い切ってるようには見えないが…
次は evbarm/star/star_machdep.c と evbarm/star/star_starup.S あたりを。
EOF