[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