ジャンル不定の日記です。

SheevaPlugにArch Linux(SDブート)入れてみた

先日SheevaPlugでArch Linuxが動くことを知ったんで、眠ってたSheevaPlugを有効活用できないかと思ってとりあえず入れてみた。

SSHとかが動く状況下ならLANでPCから操作してもいいが、U-BOOTの操作とかはSSHじゃ無理なのでUSBケーブルで繋いでシリアルコンソールで操作する。
まず、以前使ってた時の記事を参考にしてシリアルコンソールの使い方。

以前はUbuntuが母艦だったと思うが、今はArch Linuxが母艦。
シリアルコンソールは以前と同じscreenが公式リポジトリから入れれた。
sudo pacman -S screen
先日までメインPCのroot権限はsuしてから使っていたが、Android関連でroot権限の操作が多くてめんどかったんでsudo導入した。

USBシリアルのデバイスは、SheevaPlugをUSB接続していない状況と接続した状況で、
ls /dev
して確認。
/dev/ttyUSB0
がSheevaPlugなことが判明。

sudo screen /dev/ttyUSB0 115200
でシリアルコンソールで操作できる。
screenの終了の仕方は、「Ctrl+a」押して「k」押して「y/n」の選択が出るから「 y」で終了。

SheevaPlugに入ってるOSは標準のUbuntuだと思うが、標準のrootパスワードは「nosoup4u」

Arch LinuxはSheevaPlugの内蔵NANDに入れようと思ったんだが、端末のNAND書き換えるのにSDブートのOSが必要かな?
というわけで、SheevaPlug標準のUbuntuを取ってきてSDに入れようとした。
http://www.plugcomputer.org/downloads/plug-basic/
から、「Sheeva Plug Installer」を取ってくる。

README.txtを読むと、インストーラーの使い方は、
  1. FAT16かFAT32でフォーマットされたUSBメモリを用意
  2. sheevaplug-installerのtar.gzを母艦の作業用ディレクトリに展開
  3. uboot/uboot-env/uboot-xxx-custom.txtを開いてMACアドレスを修正する
  4. installerディレクトリの下のファイル全てをUSBメモリのルートにコピーする(README.txtだとsudo cp -aしてるんで、その通りにやった方が良さそう?)
  5. 母艦からUSBメモリを外して、母艦とSheevaPlugをケーブルで繋ぐ
  6. 母艦でrunme.phpの場所に移動してroot権限で実行する
らしい。
README.txtではinstaller/uboot-custom.txtとなっているが、そんなファイルは無く、uboot/uboot-env/uboot-xxx-custom.txtにmmc用とnand用の2ファイルがある。
MACアドレスは動作中のSheevaPlugで確認してもいいが、SheevaPlug裏面のシールに記載されている。

runme.phpは引数に「mmc」か「nand」を与えて実行し、U-BOOTを初期化+設定して、OSまで入れてくれるぽい。簡単そう。
と思ったんだが、
まず、READMEだと母艦Linuxにphp-cliをインストールしろと書いてあるが、Archにはphp-cliはないのでphpを入れた。
runme.phpは1行目が「<?」となっているが、「<?php」にしないと動かなかった。
43行目と44行目のroot確認の箇所で突破できなかったんで、そこコメントアウト。
コマンドラインツールなんだからphpじゃなくてperlにしてほしいわ・・・

さらに、libftdi.so.1がないとエラー。
同梱のopenocdを使うようになっているが、Archのリポジトリにあったのでopenocd入れて119行目の「openocd/openocd」を「openocd」に変更してpacmanで入れたopenocdを使うようにしてみたが、
今度は、インストーラーの設定ファイルで使っている機能がダメみたいで無理だった。
pacmanでopenocd入れたらlibftdi.so.1は入ってたんで、runme.phpを元に戻してみたが、やっぱダメ。
pacmanで入れたlibftdi.so.1は64bitのはずだが、インストーラー同梱のopenocdは32bitだろうね・・・
32bitのlibftdi.so.1拾ってきて試してみたが、それもダメ。

ArchのメインPCからインストーラーを使うのは諦めて、Windows用のインストーラーも同梱されてるんでWindows使ってインストールすることにした。
Windowsのインストーラーを使うにはUSBシリアルのドライバを入れる必要がある。
http://sourceforge.net/projects/libusb/
↑ここからLibUSB-Win32というデバイスドライバを取ってきてインストール。
名前が「Win32」とかなってるけど、64bit版も入っててXPの64bitでもインストール可。
bin\inf-wizard.exeを実行するとUSBデバイスの選択画面が出るので、対象のUSBシリアルぽいのを選択して進むとファイルが展開されて、そのままインストールできる。
それっぽいデバイスが2個出てきたんで2回入れた。

コマンドプロンプトから、インストーラーの「runme.exe」を実行するとU-BOOTが再インストールされて設定される。
で、止まる・・・
README.txtを読むと、U-BOOTのインストールが終わったら止まるのが正しい動作で、Ctrl+Cで強制終了するぽい。

SDかNANDにインストーラーがOSインストールしてくれるものと思ってたんだが、U-BOOT関連だけで終わったし、
runme.phpのコード読んでもU-BOOTだけ初期化してOSインストールするコードが無いような・・・


そんなわけで、U-BOOTの再インストールと設定はできたんだが、OSインストールは別の方法で入れることにした。
作業は再びメイン機のArchからscreenでだが、
インストーラーで設定されたboot処理を見ると、SDの1番目のパーティションのuImageがkernel、2番目のパーティションがrootfsになるぽい。
1番目のパーティションはext2にする必要があるようだが、kernelもrootfsもSDのパーティション上にファイルを置くだけでいいぽい。
2番目のパーティションはkernelが対応していれば何でも良い気がするが、インストーラーではext3になってたんで、
32GBのSDを1番目をext2で512MB、2番目をext3で残り全部にすることにした。

で、当初SDにUbuntu入れて、SDブートでNANDにArchを入れようと思ってたが、kernelもrootfsをSD上に置くだけなら、SDもArchにしちゃえば良いね。
http://archlinuxarm.org/platforms/armv5/sheevaplug
↑から「Arch Linux ARM (Latest)」を拾ってくる。
展開はファイルの所有者を維持して行う必要がありそうなんで、
sudo tar zxfvp ArchLinuxARM-kirkwood-latest.tar.gz -C SDカードの2番目のパーティション
としてpオプションをつけてtarでSDの2番目のパーティションに展開。
tarコマンドはpオプションでファイル所有者が維持されるぽい。
cp -a SDカードの2番目のパーティション/boot/* SDカードの1番目のパーティション
で1番目のパーティションにkernelだけコピーした。


SDカードをSheevaPlugに挿してresetしたらArchが起動した。
rootの初期パスワードは「root」になってる。
ネットワークも最初から使えて、
pacman -Syu
でArchアップデートしたんだが、ネットワークが落ちたぽくて途中で死んだ。
熱暴走かな?


市販ルーターがどれも糞すぎるから落ちないルーターをSheevaで自作出来ないかと考えてるが、Sheevaも糞だからダメだねw
ルーター以外の使い道は、USBが1ポートあるから、ワンセグチューナー使えればTVサーバーにしたいな・・・と
前はSDをデータ用ストレージにしてNAS用途にしてたが、SDじゃ遅すぎてダメ。

当初は最終的にNANDにArch入れようと思ってたが、SDでも良いかな?
とも考えてるが、別の用途でSD使う必要がでた時にSheevaの方をNANDブートに切り替えるのも面倒だし、後でやっとくかな。
SDブートでOSが起動できればNANDにインストールするのも簡単と思ってる。