[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pbsd-mg2] Re: Telios cannot load kernel
| あ、PR31700 では DRAM の phys addr が 0x0 でなくて、0x4400 0000 なの
| か。platid でも見て場合分けするしかないかもしれません。
0x46000000 kuseg DRAM bank 1
0x44000000 kuseg DRAM bank 0
0x06000000 kseg0, kseg1 DRAM bank 1
0x04000000 kseg0, kseg1 DRAM bank 0
0x02000000 kseg0, kseg1 DRAM bank 1 (or CS1)
0x00000000 kseg0, kseg1 DRAM bank 0 (or CS1)
と、なっていて、0x0を指定すると、VirtualCopyに失敗してしまいます。
0x44000000及び、0x04000000は使えるようです。
0x04000000を使うことにして、
vmem.c:
Scan whole physical memory.のところを
VirtualCopy((LPVOID)mem, (LPVOID)((0x04000000 + MEM_BLOCK_SIZE * N) >> 8),
MEM_BLOCK_SIZE, PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL)))
登録するところを、
phys_addrs[pageno].addr =
(unsigned char*)(0x84000000 + MEM_BLOCK_SIZE * N +
getpagesize() * i);
startprog.c:starprog()
の、interrupt vectorの部分をマップするところを、
VirtualCopy((LPVOID)mem, (LPVOID)(0x04000000 >> 8), 0x400,
PAGE_READWRITE | PAGE_NOCACHE | PAGE_PHYSICAL);
interrupt vectorのかわりに実行するところを、
startprog.c:asm_code_holder()
print 'OK' を削る (linuxce-MLの方でもこのあたり話題になっていたようですが...)
I-cache, D-cache のフラッシュを削る(これは、R3000用に書きかえる???)
で、kernelに制御を移行できたような感蝕を得ました。
# まだ、framebufferを設定して落書をしてみた程度なので、なんともいえないんですが...
---
UCHIYAMA Yasushi
uch@nop.or.jp