いろいろ記録しておこう。
久しぶりに動かしてみる。なんと、よく見ればシリアルポートは SCC ではないか。
と言う訳で、ttyS01 は SCC であり、そのアドレス オフセットは 0x0000 、つまり SCC1であることがわかる。[root]# ps PID TTY TIME CMD 83 ttyS1 00:00:00 bash 86 ttyS1 00:00:00 ps [root]# cd /proc [/proc]# cat kmsg <4> <4>SYPCR 0xffffff07 (snip) <6>CPM UART driver version 0.02 <6>ttyS00 at 0x0280 is a SMC <6>ttyS01 at 0x0000 is a SCC <4>Installing DSR handler <4>Installing CD handler <4>Installing CTS handlerずっと SMC1 だと思い込んでいた僕が馬鹿なのね。とほほ。
tcpdwl.c を読む。どうやら ELF ファイルをそのまま送信して いる様だ。それで、ファイルの オフセット 0x100 になにやら 書き込んでいる。これはよく見ると PowerPC の機械語ではないか!!!
FlashROM は 4[MByte](0x00400000) だから、実体は 0xfff00000 ぐらいにあるはず。 で、隠されている BootROM が kernel を RAM にコピーしてから、 この 0x100 に飛んでくる。と言う事。 だから イメージは 0x00210000をベースに作ればよい。0番地にジャンプではなく、 0x00200100 にジャンプということ。3c 00 00 21 lis r0,0x00210000@h 60 00 00 00 nop 7c 08 03 a6 mtlr r0 4e 80 00 20 blrまあ別に Kernel-2.4.0test 系でやっているように自分自身を再配置すれば良いが。
うまくいかないので、もう一度基盤を良く見てみる。発信器を確認。
4.096[MHz] x 12 倍 で 49.152[MHz] のはず。20.000[MHz] 10Base-T 用 25.000[MHz] 100Base-TX 用 7.3728[MHz] シリアル用??? 4.096[MHz] これが EXTCLK なのだ。
やっと動き出す。ストッパーをかましつつ歩腹前進。
よって MODCK[1:2] = "11" である。また SCCR = 0x01800000 である。SCCR[RTSEL] は '1' である。 SCCR[RTDIV] は '1' である。 PLPRCR[MF] は 11 である。Boot が設定したようだ。
コンソール SCC1 が動いた。結局ボーレートとメモリの割り付け 問題が大きかった。レジスタダンプに成功。これで勝ったような ものだ。
CS5, CS6, CS7 は毎回値がブートのたびに変化するので未使用か。
ダンプするレジスタを増やしていこう、と思ったがやめる。 自製ブートコードを動かすことにする。
[修正個所]
とりあえず完了。これで全アドレス対してダンプと書き換えが可能になった。- エントリポイント
- 使用する RAM 領域の変更
- リンカスクリプト
- 初期化の値を若干
では、kernelの構築にかかることにする。
やっぱり mbxboot を強引に動かすことにする。かなり大幅に書き換え。 make zImage とりあえずシリアルコンソールを生かした状態で、kernel の ブートに成功。 ログはこれ。先はまだ長い。