TeraStation (その5)

カーネルをはじめ、GPLウェアのソースコードはこのあたりから入手できる。カーネルコンフィグも同梱されていて良心的。<アーカイブをほどくと、NasFirmware/marvell/nas_firm_tgl/linux-2.6.16_lsp.1.7.8とかの深いディレクトリが掘られていたりするが、以下ここからの相対表記で。よく見ると、家庭用モデルのTeraStation Liveも同じページを指しているので、やはりカーネルなんかも共通なのかもしれない。

まずはクロスコンパイル環境。ホストとして手元のノートPCに入っていた古いDebian (3.1) を使うことにした。たぶん、NetBSDのEMUL_LINUXとか、Windows (cygwin併用) とかでも大丈夫だろうが。

動作中に/proc/versionあたりを覗いてみると、カーネルはgcc version 3.4.4 (release) (CodeSourcery ARM 2005q3-2) なるコンパイラで作られたらしい。ぐぐる。この辺のSourcery G++ Lite Editionが無償で使える。ライセンスが明示されないのが気になるが、中身はgcc、binutilsなどおなじみのGNU toolchainなので、当然GPLということだろう。一応バージョンも合わせておいた。ホスト環境としてはGNU/Linux、Windows、Solarisが選べる。ターゲットは、ARM EABI (ちなみにユーザーランドはARM GNU Linux) を選択する。tar.bz2なので適当な場所 (たとえば/usr/local/sourcery) に展開。

カーネルイメージにu-Bootのヘッダを追加するのにmkimageなるコマンドが必要となるが、これはu-Bootのキットの中に含まれている。単体でコンパイルすることも難しくはない。

もとのカーネルコンフィグはbuffalo/以下にいくつかあって、ファイル名からして一番それらしいbuffalo_tshtgl_arm_110.configがたぶん純正のカーネルのそれ (こいつを使って試しにコンパイルしてみると、大体似たようなサイズのカーネルができた。コンパイル環境を文字列として埋め込んだりしたものを圧縮する、とかしているので、完全に一致させるのは難しい)。

実は1つ罠があって、このカーネルを使って起動してもEM MODEになってしまう。カーネルをコンパイルした日時が埋め込まれていて、そいつがユーザーランドの日付より新しいとダメ。埋め込んでいるのは、buffalo/drivers/buffalocore.cあたりで__DATE__とか__TIME__とかを参照している部分なので、これを固定文字列にしてしまうか、ユーザーランド側の/etc/linkstation_releaseを編集すればよい。私は前者の方法をとった。

というところで…

% cp buffalo/buffalo_tshtgl_arm_110.config .config
% make ARCH=arm menuconfig

File Systems -> Network FilesystemsのあたりにNFS server supportとか言うのがあるのでこいつを有効にし、その他NFSv3サポートとか、USBのヘンなデバイスドライバとか、お好みに応じて編集する。また、モジュールなどの上書きを防ぐため、バージョン文字列を変えておいたほうがよい。General setup -> Local versionあたり。できたコンフィグを保存してメニューを終了。

% make ARCH=arm CROSS_COMPILE=arm-none-eabi- -j4 all uImage

という感じ。-jはお好み。結構大きくしてもコンパイルにかかる時間は短くなっていくので、デスクトップPCでは32とかにしてる。

結果はTeraStationに転送する。モジュール群は、findで*.koをかき集めてもいいが、

% make CROSS_COMPILE=arm-none-eabi- INSTALL_MOD_PATH=/tmp/hogehoge modules_install

とかで/tmp/hogehoge/lib/modules/2.6....とかのディレクトリができて、そこにコピーされるのでこいつをtarとかで固めるのが楽。TeraStationの/lib/modules/2.6....におく。カーネルイメージはメッセージの通りarch/arm/boot/uImageにできているので、これを/bootにコピー。

早速新しいカーネルを起動。シリアルコンソールを有効にし、端末をつないでreboot。Restarting system.というあたりがLinuxが最後に出すメッセージ。しばらくディスクとかの認識のメッセージが出て、Hit any key to stop autoboot: というカウントダウンが2度ある。1度目はtftpブートのためのものなのでスルーし、2度目のカウントダウンで何かを押すとu-Bootのプロンプト (「Marvell>> 」)が出る。

Marvell>> setenv kernel uImage
Marvell>> boot

これで新しいカーネルが起動するはず。正常起動を確認したら、/boot/uImageを/boot/uImage.buffaloにリネームすればよい。

mountdとかのユーザーランドのファイルも必要となるが、これは気が向いたら。

トラックバック(0)

トラックバックURL: http://makoto.minoura.org/d/mt/mt-tb.cgi/309

コメントする

このブログ記事について

このページは、みが2008年2月19日 20:55に書いたブログ記事です。

ひとつ前のブログ記事は「うみへいくピン・ポン・バス」です。

次のブログ記事は「ロス疑惑」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。