2010年2月死んだTerastationPROを復活&Linuxサーバ化:前編 |
ネットワークストレージ、通称「NAS」(ナス)と呼ばれる装置が脚光を浴びています。
簡単に言うとLAN経由の外付けハードディスクな訳ですが、LAN経由だけに複数のパソコンから同時にアクセスできる上に、最近ではパソコンだけではなくテレビやHDDビデオレコーダー等からも使うことができるようになっているなど、企業のみならず一般家庭においても情報の一元管理・保管場所として大変便利に活用されています。
パソコンを1台用意して、そいつをファイルサーバにしても良いのですが、管理が大変だったり面倒だったりするのが難点。企業のように専任の管理者が居れば話は別ですがね。
反面、NASの場合はほぼ家電製品なので、電源をプチッと入れて、後はブラウザでプチプチと設定するだけで導入完了、後はメンテナンスフリーで良いというのが一般家庭への導入の敷居を下げていると言えましょう。
加えて、それに特化した専用機器なので、余計な物が一切付いていない。
消費電力の面でもパソコン1台置いて電源入れっぱなしにするよりも断然お得。
エコって訳です。
そんな素敵な製品、欲しいわ!
と言うわけで我が家へやってきましたのがこちら。
BuffaloのTeraStation PRO。
プロと銘打つだけあって、ディスクを4発搭載し、RAID5対応でギガビットイーサなNASです。
CPUはPowerPCベースのCPUを搭載し、OSはLinux。
その上にapacheやらsambaやらが乗ってるんでしょうね。
最近のネットワーク系アプライアンス機器の定番とも言える、よくある構成です。
新品では買えないので、もちろん中古。
しかーし!
中古は中古でも、そんじょそこらの中古とは訳が違う。
未起動品。
電源投入時の様子は↓の動画をご覧あれ。
"Can't Load Krnl!" と出ていることから、ファームウェアに何らかの問題が有ることが分かります。
ということは、ファームウェアのアップデータを使ってファームを流し込んであげれば復活!
おお、なーんだ簡単じゃなーい。
Buffaloのサイトよりアップデータをダウンロードし、手順に従っていざ実行。
/  ̄ ̄ ̄\ / ─ ─\ / -=・=- -=・=-\ | (__人__) | \ ` ⌒´ / / \ |
まあ、予想はしてましたが...
アップデートを掛けるにも、本体にIPアドレスが振られている必要があるわけで。
現状、IPアドレスが振られる以前の状態で落ちている訳で...
そりゃそうっすよね。
少し調べてみると、ファームウェアのアップデートに失敗した場合でも「EMモード」という緊急復旧モードで起動することで、再度ファームウェアのアップデートを行う事が出来るらしい。
EMモードとは、内蔵フラッシュメモリ内に格納された、このような状態からのリカバリを行う際に必要最低限のOS環境で起動した状態のこと。
EM = EMergency のことでしょうね。
EMモードになる条件は、
EMモードで起動した場合は、ベートーベンの交響曲第5番「運命」の冒頭部分がBEEP音で鳴るそうです。
____ / \ / ─ ─\ / (●) (●) \ ほうほう | (__人__) | / ∩ノ ⊃ / ( \ / _ノ | | .\ “ /__| | \ /___ /
ならばそのEMモードで起動してみよう。
赤いボタンは、フロントパネルを開けて、LCDパネルの下側にあります。
これを押しながら電源ボタンをポチッとな!
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ / \ / \ / ――― ――― \ / _ _ \ / /´ ,..::::::::::.ヽ ヽ /´ ,..:::::::::::.ヽ ヽ \ / ,' ,;::::::::::::::::::', ', ,' ,;:::::::::::::::::::', ', \ / { {:::::::::::::::::::::} } { {::::::::::::::::::::::} } \ / '、 ヽ::::::::::::::/ / '、 ヽ::::::::::::::/ / \ | (;;;;;;;;;;)) ̄ / | \  ̄ | | /' / ∧ ', | | {{ { / ヽ } | | ヽ ヽ___/ __ \___ノ | . _______ \ 人 ヽ ´ ` ' / ││ \ ( し.) / ││ \ `¨ / ..││ / \ ││ / \ ││ |
EMモードで起動しようとはしているものの、それすらも起動に失敗している。
というか、電源を入れてからエラーメッセージが表示されるまでが異様に早い。
これは、本体内蔵フラッシュメモリ内に入っている全てのファームウェアが一切合切吹っ飛でいるという、まさに何処に出しても恥ずかしくないジャンク品ですね?
通ぶって言うと "bricked" 状態と言ったりしますが、でけーレンガだなオイ。
通常、ここまで逝ってしまうと通常は修理工場か清掃工場送りなのですが、そこはそれ、修理が出来るものは修理して使う。
まさにエコ。
何と言っても中身は単なるLinuxマシンなので、何でもありだ!
という訳で今回のテーマはこちら。
さてまずは例によって情報収集から。
その道のプロならいざ知らず、事をおっ始める前に出来る限りの情報を集めることは物事の基本です。
ざっと小一時間ほどググったところ、以下のことが分かりました。
ふむ。
フラッシュメモリが無傷であること、正確にはEMモードで起動できるかどうかが棘(いばら)の道か否かの分かれ道ってことだな。
だが残念なことにコイツはEMモード用OSもろとも綺麗さっぱり吹っ飛んでる、何処に出しても恥ずかしくないジャンク品なので、棘の道決定。
さらに情報を集めていくと..
とのこと。
カスタムファームを配ってる先人達が居るということと、リカバリ方法が確立していることはとても心強い。
しかしリカバリ方法がJTAG(ジェイタグ)とは、ほぼ、組み込み機器のデバッグ・メンテナンスという感じです。
最初は、フラッシュメモリを基板から引っぺがしてROMライタに突っ込んで...という事態を想定していたのですが、それよりはハードルが下がって助かりました。
とは言え、敷居が高いことには代わり有りませんが...
だが、ここまで来たからには行くしかない!
退路は断たれた。前進あるのみ!行くぞオラー!
\/\/\/\/\/\/\/\/\/\/\/\/\/\/ こ こ か ら 超 濃 厚 な ヲ タ ス レ に な り ま す。 ご 期 待 く だ さ い ! ! /\/\/\/\/\/\/\/\/\/\/\/\/\/\ |
落ち着け!こんなときには分解だ!
本体底面にある足を外し、ケースカバーを外すとこんな感じです。
本体正面に向かって左側側面に、このようにメイン基板がマウントされています。
綺麗な作りですね。
基板をシャーシから分離し、基板表面が見えるようにひっくり返した図(クリックで拡大)。
LANコントローラはお馴染みRealtekのRTL8110S。
蟹のマークのRealtekがお送り致します。
CPUはFreescaleのMPC8241LVR266D。
PowerPCベースで動作クロックは266MHz。
今回はこの "PowerPCベース" というのが今回とても重要だったりします。
あからさまにシリアルポートな空きランド。
実際、ここはOSからはCOM1として見えるポートです。
ちなみに本体背面にあるUPS接続ポートは、OSからはCOM2として見えます。
信号レベルはTTLレベルなので、パソコンのシリアルポートに繋ぐにはMAX232等のレベルコンバータを噛ましてあげる必要があります。
丁寧にピンアサインがシルク印刷されているので、とても助かります。
そしてこれがお目当てのJTAGポート。
機器の開発・デバッグ時にはここにJTAGケーブルを繋いで色々やります。
今回はここが突破口となる、とっても大事な場所。
基板の大まかな様子はこんな感じです。
突破口たるJTAGポートがちゃんと空きランドとして設けられていることや、プルアップ抵抗などもきちんと実装されているようなので、単純にそこに繋げば良いのがとても助かります。
では、今回の突破口たるJTAGポートに攻め入ることにしましょう。
といっても、本体側の細工は空きランドにピンヘッダを立てていくだけなので簡単。
こんな感じ。
ついでにシリアルポートにもピンヘッダを植えておきましょう。
さてピンは植わりましたが、肝心のピンアサインが分からないことにはどうしようもありません。
そこは有能な先人達、ちゃんとピンアサインが公開されていました。
以下のようになっているそうです。
先人達の偉業に敬意を払いつつ、ありがたく利用させて頂きましょう。
|
___ ,;f ヽ i: i | | | | ///;ト, | ^ ^ ) ////゛l゛l; おおお天の恵みか! (. >ノ(、_, )ヽ、} l .i .! | ありがたやありがたや ,,∧ヽ !-=ニ=- | │ | .| /\..\\`ニニ´ !, { .ノ.ノ / \ \ ̄ ̄ ̄../ / .| |
本体側の突破口が空いたところで、今度はその突破口に攻め入るための装備を用意する必要があります。
具体的にはJTAGケーブルの用意とJTAGソフトウェアの用意です。
JTAGソフトウェアは、先にも述べたとおり市販品・フリーウェア含めていくつか存在します。
過去の事例をひもとくと、TopJTAG Flash Programmerというソフトが使えるようですが、Cygwin+openwinceが実績としては豊富なようですので、今回はこの組み合わせで行くことにします。
またJTAGケーブルは、市販品を使っても良いですし自作しても構いません。
市販品(〜約1万円程度)を買うほどリッチメンではないので、もちろん自作で行きます。
ケーブルを自作する場合は、いくつかのベンダーよりJTAGケーブルの回路図が公開されているので、それを参考に部品を集めて作っていくのですが、使うJTAGソフトウェアで対応しているケーブルを選ぶことが肝心です。
今回使用予定のjtagソフトウェア(openwince)で対応しているJTAGケーブルは、
とのことなので、この中のどれかを選ぶ必要があります。
どうせ作るんだったら、今回の件以外にも使えて多くのソフトでも対応しているメジャーな奴がいいなあと思って見繕ったのが、アルテラ社のByteBlasterMVとザイリンクス社のDLC5。
アルテラByteBlasterMVの回路図
ザイリンクスDLC5の回路図
見た感じByteBlasterMVの方が作りやすそうなので、ByteBlasterMVで行くことにしますかね。
部材を用意し、
紙に配線パターンを起こして、
ユニバーサル基板上に実装していきます。
基板上に植えたピンヘッダと接続するため、ケーブルエンドにコンタクトピンを付け2550コネクタに埋め込みます。
コンタクトピンは本来圧着工具で圧着する物ですが、工具が無いので今回はコネクタにケーブルを半田付けしちゃいます。
完成図。
各ケーブルにはテプラで信号線の名称を貼っておきました。
なお、ByteBlasterMVの回路図上ではバッファチップが74HC244となってますが、3.5V環境でも使えるよう74AC244を使ったほうが良いでしょう。
先人達のディスカッションでも74HCではうまくいかない事例が散見されたので、それに倣い74AC244を使用することにします。
ケーブルの準備ができたところで、今度はソフトウェア側の準備です。
既に述べたとおり、今回はCygwin上でopenwinceを使うことにします。
Windows上にCygwin環境を作り、そこにopwnwinceをダウンロード。
openwinceはソースファイルでの提供なので、Cygwin上でコンパイルしていくのですが、現在最新版のリリースであるjtag-0.5.1は2003年11月リリース。実はこのバージョンではTeraStationProに乗り込むことはできません。
どうするかというと、CVSソースリポジトリから最新版のソースを取ってきて、なおかつそのソフトにパッチを当てる必要があります。
これも先人達の試行錯誤により、方法は確立しています。
大雑把には以下の通り。
Cygwin環境を構築。インストールするパッケージ類は以下
インストール後、ホームディレクトリを /home/xxxx へ変更するため Cygwin.bat の bash 起動行の前に以下を追記。
set HOME=/home/xxxx
これがないと Documents and Settings 以下にホームディレクトリが作られ、openwince の make installでこける(パス名にスペースが入る事による弊害)
$ cvs -d:pserver:anonymous@openwince.cvs.sourceforge.net:/cvsroot/openwince login $ cvs -z3 -d:pserver:anonymous@openwince.cvs.sourceforge.net:/cvsroot/openwince co -P include jtag
この中にはMPC8241のデータがないので以下から落としてくる
http://buffalo.nas-central.org/w/images/f/f2/Openwince-jtag-mpc8241.txt
落としたら jtag/data/motorola/mpc8241/1.2 として保存。
$ cd include $ ./autogen.sh $ ./configure $ make install
$ cd jtag $ ./autogen.sh $ ./configure $ make $ make installlibbrux/po/Makefile の MKINSTALLDIRS 行がおかしいので以下のように書き換える必要あり。
$(HOME)/jtagwork/jtag/tools/mkinstalldirsその後mpc8241のファイルをコピー
$ cp -R data/motorola/mpc8241 /usr/local/share/jtag/motrola/
FlashメモリがSTMicroの場合は要パッチらしい。
http://www.yamasita.jp/linkstation/BBS/2510.html
http://www.yamasita.jp/linkstation/BBS/2913.html
パッチ1(hnishiパッチ)
http://www.yamasita.jp/cgi-bin/BBS/eztree.cgi?action=view&view_num=2422
パッチ2(わんこパッチ)
http://www.yamasita.jp/cgi-bin/BBS/eztree.cgi?action=view&view_num=2538
パッチ3(かいへいパッチ)
http://www.yamasita.jp/cgi-bin/BBS/eztree.cgi?action=view&view_num=2932
なお、試しにパッチ当てずに実行してみたところ、一見うまくいっているように見えるものの、書き込み後のべりファイでエラーになります。素直に上記パッチを当ててビルドしましょう。
てことで、パッチ済みファイルと、ついでにMPC8241のJTAG declarationファイルを以下に置いておきます。
ケーブルとjtagソフトの用意が出来たら早速ドッキング!
写真では基板のJTAGポート群からJTAGケーブルの電源(VCCとGND)を取ってますが、どうも怪しいのでシリアルポートにあるVCCとGNDから取った方が良いかも知れません。
また、このタイミングで基板上のシリアルポートへも繋いでコンソールの状態を見ることにしましょう。
先にも述べたとおり、このポートの信号レベルは+5V/0VのTTLレベル。シリアルポートに使用されているRS-232C信号規格は-15V/+15V。当然直結することはできず、間にレベルコンバータが必要になります。
定番のMAX232を使ってブレッドボード上に回路組んでもいいのですが、今回は携帯電話のメモリ編集ソフトに付いてきたUSB接続ケーブルを流用することにします。
レベル変換とUSB-シリアル変換を同時にやってくれるのでシリアルポートのないノートPC等でも使えて重宝する1本です。
見ての通り、携帯電話と接続するコネクタ部分をバラして、そこにコンタクトピンと2550コネクタを付けています。
マイコン工作をする場合、この手のレベルコンバータはよく必要になるので、1本あると何かと役に立ちますよ、ってこんな所見に来るような人には言うまでもないですね。
接続風景。
シリアルコンソールが繋がったところで、ちょっとコンソールログを拝んでみましょうか。
先ほどのシリアルポートにシリアルケーブルを接続し、Terastationの電源を投入すると、ブートメッセージが表示されます。
通信速度は57600bps。
フラッシュメモリの中身がカラになって読めないせいでしょう、Product Informationがえらいことになってます。
そして最後に「Mi」まで表示したところで、先の動画で言うところの「ピー!ピ−!」連続鳴動状態です。
この「ピー!ピー!」連続鳴動状態になると、電源ボタン以外の全ての制御を受け付けてくれないので、JTAGケーブルで繋いで何かやる際には電源投入→連続鳴動状態までの僅かな間にデバッグモード(ってものがあるのかどうか分かりませんが)へ落とす必要があるようです。
一旦Terastationの電源を落とし、JTAGケーブルとシリアルコンソールを接続。
いざ!
Cygwin上からIOポートを使えるようにする(初回のみでOKみたい)
$ ioperm -i
openwinceのjtagプログラムを実行
$ /usr/local/bin/jtag
jtagコマンド実行
jtag> cable parallel 0x378 ByteBlaster jtag> detect jtag> include motorola/mpc8241/1.2 jtag> endian big jtag> instruction SAMPLE/PRELOAD jtag> shift ir jtag> shift dr jtag> dr jtag> instruction EXTEST jtag> shift ir jtag> initbus mpc824x jtag> detectflash 0xFFC00000
Terastationの電源が入っていないとdetectできない(VCCにも電源来てないので当然と言えば当然)。
また、BEEP音連続鳴動状態になってしまうとVCCへの電源供給が絶たれるので、TerastationPROの電源をONした直後に cable parallel 〜 detectflash までのコマンドをCopy&Pasteで一気に実行。
そうすることでBEEP音連続鳴動状態になる前に、JTAGデバッグモード(?)に入ることができる。
成功するとフロントパネルが "ROM Checking.." の表示のままで止まる。
ここまでうまくいったら、いよいよファームウェアの書き込み。
ファームウェア本体となるbootcode.binとfirmimg.binはBuffaloのファームウェアアップデータの中にあるので、それを使います。
上記2ファイルをカレントディレクトリへ置き、いざ!いざ!
jtagコマンド実行
jtag> flashmem 0xFFF00000 ./bootcode.bin jtag> flashmem 0xFFC00000 ./firmimg.bin
書き込み中の図。
こんな感じでざくざくと書き込まれていきます。
bootcode.bin (42KB)の書き込みとベリファイで約30分。
ということは、firmimg.bin (3MB)の書き込みとベリファイで36.5時間?
USB接続のJTAGケーブルならもっと早く書き込めるようですが、パラレルケーブル接続なので遅い遅い。
じっと我慢の子です。
その間、jtagコマンドを実行しているパソコンが省電力モードになったり、WindowsUpdateの自動更新に引っかかって「後で再起動する」を何度も何度も叩く羽目にならないよう、注意を。
ベリファイが通ればファームウェアの書き込みは完了。
一旦電源を落として、再度電源投入。
そして....無事起動すれば、はい一丁上がり!
念には念を入れて、Buffaloのファームウェアアップデータを使って再度ファームウェアを更新しておきましょう。
これでフラッシュメモリの中身も、ディスク上のOSも最新版になります。
長くなったので今日はここまで。
次回はTerastationのLinuxbox化に取りかかります。