[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Porting NetBSD to L-Card+



At Sun, 29 Dec 2002 10:22:37 +0900,
TAKEMURA Shin wrote:
> 
> 結局L-Card+ 16Mを買ってしまいました。
> 買ったのはflash 8MBx2 bankのバージョンなのですが、
> 最初に入っているモニタはflashのどこに入っているのでしょうか?

ROM ソケットボード (ROM Board for LC)に同梱されている
モニタソースの ldscript から読み取った限りでは、

物理アドレスの 0x1fc00000 から 0x1fc80000 まで、
KSEG1 空間では 0xbfc00000 から 0xbfc80000 までが
モニタの text と data のようです。bss は
0xa0000000 から 0xa0020000 までの 128Kbyte ですね。

Linux kernel は 0xbfd00000 から書くようです。

モニタに関しては lcard-users メーリングリストの
下記三つのメールが参考になるかもしれません。

http://l5web.laser5.co.jp/ml/lcard-users/msg00159.html
http://l5web.laser5.co.jp/ml/lcard-users/msg00165.html
http://l5web.laser5.co.jp/ml/lcard-users/msg00174.html

> つまり、どこを書きつぶすと起動しなくなってしまうのでしょうか?
> なにせ壊したら自分ではもとに戻せないのでちょっと怖いです。

> とりあえずlcboot.srecとnetbsd.gz.srecは作ったんですが
> これをどのヘンに書き込めばいいのかわかりません。
> lcboot: 0xbfc0 1000
> netbsd.gz: 0xbfc40000
> あたりで大丈夫でしょうか?これだと元のモニタを上書きしてしまう
> ようなきもします。

はい。現状の lcboot はモニタを上書きします。書き損じると一巻の終りです。

as-is のコードでは次の問題があります。
	- 独自モニタ (lcboot) から起動する。
		独自モニタは、mach_init() へ渡す引数を
		組み立てています。
	- lcboot はオリジナルのモニタを上書きしないと使えない。

それを踏まえて、チャレンジする場合、次のようにしてください。

	1. lcboot を下記オプションで build する。

		make ROMICE=no

	   これでリセットベクタ付きで build され、 0xbfc00000 に
	   配置されるはずです。

	   make ROMICE=yes としてしまうと、ROMICE で動かすことを
	   前提としたバイナリができてしまい、起動しません。ご注意。

	2. lcboot を 0xbfc00000 に書き込む。

	   L-Card のモニタで ROM に何か書く場合は一旦 RAM の適当な
	   場所にロードしてから w コマンドで書く事になりますが、
	   lcboot を build してできる S-record は 0xbfc00000 に
	   配置するようになっているので、0xbfc00000 + offset が
	   0x80800000 などになるようにご注意を。

	   もしくは一旦 binary にしてアドレス情報をはがしておいて
	   srec に戻しても良いかもしれません。

万一モニタを壊してしまったら、とりあえず言って頂ければなんとかします。
私の手元にはモニタを飛ばしてしまった場合に復帰するための治具が
あるので、任意のバイナリを書き直せます。


もう少し気楽に遊ぶためには、独自モニタがしている処理を
NetBSD カーネルの mach_init() の手前に当たる位置に
もってきてあげ、オリジナルのモニタから直接起動できるように
してあげる必要があると思ってます。

// ちょっと高いですよね、L-Card、、、

--
Naoto Shimazaki