chakokuのブログ(rev4)

日々のごった煮ブログです

DN-G200のブートローダを改良>飛んでしまう。。

DN-G200の中身であるところの、MA-300または、OpenBlockSSのファーム(リセットベクタから後ちょろっと走る部分)を読み出すべく、ブートローダに簡単なモニタ機能を付けようとしてます。そもそもなんでこんなことしているのか??→ブートシーケンスが気になってしょうがないから。。なぜ気になるのか??→自分でもよく分からない。やっぱマイコン小僧のDNAが抜けない?

モニタプログラムを小手先で作るのは結局時間がかかるので、昔作った俺Forthを無理やりブートローダに組み込んでみた。。すると、、7segLEDが2を表示したまま固まってしまった。。
2を表示しているのって、zImageのブートローダ(zImage.initrd.treeboot内のarch/ppc/boot/simple/head.S)にすら飛んできていないということだろうか。。なんせflashの後半のファームは非公開のようで、何が書かれているのかさっぱり。。

とりあえず、、以下の方針で進める予定
(1)Forthの組み込みは一旦あきらめて、シリアルにダンプするだけのコードをzImageに同梱されるbootシーケンス(decompress_kernel関数内に追加)に埋め込んで強制的に読み出す。得られたダンプを下記のシミュレータで走らせてみる。。そしてなんとか理解する。
(2)飛んでしまったブートローダを真剣にデバッグする。。(JTAGとか持っていないので、IBMが提供しているppc406用シミュレータでアセンブラレベルで追いかけて何が悪いのか確認する。。しかし、、head.Sに来る前で止まっている可能性も。。relocate処理している辺りが怪しいとふんでいる。。)

■追記;フラッシュの内容
少し読み取った情報を記録
リセットベクタは、0xfffffffc
ここには以下が書かれている。


0xFFFFFFFC: 4B FE 20 40 b FFFE203C

0xfffe203cからbiosの実行が始まるようである。。forthを移植するのは一旦やめて、ブートローダMMUが動き出す前にフラッシュを強制的に読み出す方針(シリアル経由でHexダンプさせる)

■ご参考URL
IBM PowerPC Multicore Instruction Set Simulator(DLページ)
http://www.ibm.com/developerworks/power/iss/