ここ、数日考えているFlashROMについて考察をまとめてみました。
- FlashROMエリア LinkStationの/devで見えているFlashROMエリアは/dev/fl0、/dev/fl1、/dev/fl2、/dev/fl3である。/dev/fl0は、設定ファイルのバックアップエリアで、容量は512kbyte。/dev/fl1はカーネルエリアで、容量は3072kbyte。/dev/fl2はブートエリアで、容量は448kbyte。/dev/fl3はステータスエリアで、容量は64kbyte。おそらく、FlashROMの物理エリアとしては/dev/fl2が一番先頭に配置されており、CPUは/dev/fl2の先頭からインストラクション実行すると思われる。/dev/fl2ではCPUのレジスタ初期設定をして、ブートローダ(LILOのようなモノ?)を起動したあと、/dev/fl1エリアのカーネルが読み込まれる。/dev/fl2にHDDの読み書きが可能になるよう、PCIやIDEコントローラのイニシャライズが可能であればHDD上に直接カーネルも配置できるかもしれないが、いわゆるBIOSの設計となり不可能ではないだろうが、相当敷居が高い。HDDにカーネルが置ければ、4MBのFlashROMエリアは丸々BIOSに使えるため、極端な話、MacのBIOSを組み込んでしまうというのもアリかもしれない。(笑)
- Linuxが動作していればFlashROM書き換えは可能。 LinkStationはEMモード/HDDモード問わず、Linuxが正常に起動していればFlash全エリアの書き換えが可能。as_flashというFlashROMのリードライトツールが用意されている。しかし、もし今後カーネルビルドが成功して、Linux上からFlashROMを書き換え、再起動した際に、カーネルパニックなどが発生してしまうと、その後FlashROM書き換えの手段が無くなってしまうため、再起不能となってしまう。これが問題。i386のLinuxでさえカーネルリビルド後のカーネルパニックは誰でも経験あるはず、ppcなLinkStationで一発で完璧なカーネルリビルドなんて不可能。
- 外部からのFlashROMの書き換えはJTAGポートからのみ可能。 ハードウェアを解析した結果、オンボードのFlashROMを外部から書き換える方法は、CPUのJTAGポートからのバウンダリ・スキャンしか方法がない。しかしJTAGデバッガなどはとても高価で個人の興味レベルで購入できるものではない。自作することを考えると、汎用JTAGデバッガの設計は無理だろうが、機能を限定してMPC8241専用いや、LinkStation専用のFlash書き換えツールとしてなら手作りは可能だと思う。幸い、MPC8241はモトローラよりBSDL(Boundary Scan Description Language)ファイルが提供されているため、バウンダリスキャンによるピン操作は可能。あと、FlashROMの書き込みシーケンスがわかれば良いのだが、現在、Fujitsuのホームページではデータシートのダウンロードができない。(他のFlashROMは可能なのに)
LinkStation/玄箱1台ずつ、FlashROMデータを消去してしまい、再起不能になってしまっているので、本格的にFlashROM書き込み方法について考え始めています。まずハード的に分かった内容について記述します。
- FlashROMのデータシートはここからダウンロードできます。(山下さんBBSで教えて頂いた方、ありがとうございます。)
- FlashROMのRESETラインはAVRマイコンで制御されている。
- BYTE信号はVccに接続されており、Byteアクセス(8bitデータバス)
- Ready信号未使用。(NoWaitアクセス)
- WP/ACC信号はVccに接続されており、常時ライトプロテクトされていない。
とりあえず、このくらいです。FlashROMを書き換えようとおもったら、やはりJTAGか、いったんPCBからパッケージをはがすしかないですね。