2014-02-09

FlashAir™をRasPiの起動ディスクにする

東芝の無線LAN機能付きSDHCメモリーカードFlashAir™をRaspberry Piの起動ディスクとして使ってみた。

http://www.raspberrypi.org/download/で配布されているブートメディアのRaw Image(2014-01-07-wheezy-raspbian.zip)を、FlashAirにddコマンドで書き込み、Raspberry Piに差し込んで電源を入れると普通に起動する。一般的なSDカードを使った場合と何ら変わりない。

Raspberry Piの起動イメージファイルを書き込んだFlashAirは再設定してやる必要があるので、Raspberry Piが起動した後、FlashAirをフォーマットした際に行う設定手順を実行する。(参考:「FlashAir™の初期化と設定」)

FlashAirの初期設定が終わったら、MacからFlashAirアクセスポイントにWi-Fi接続し、Webブラウザで http://flashair.local/ を開くと、RasPiの/bootディレクトリーの内容が表示される。

Raspberry Pi、FlashAirともに正常に動作することを確認したら、一旦、Raspberry Piをシャットダウンする。FlashAirを抜き取って、MacのSDカードリーダー/ライターに差し込み、設定ファイルを編集する(そのままRasPi側で編集してもいいけど、設定変更を認識させるには、どっちにしろ電源を入れ直す必要がある)。

アップロードを許可する

無線LANを介して/bootの内容を書き換えられるようにするにはFlashAirへのアップロードを許可する必要がある。設定方法は、FlashAirデベロッパーズのWebサイトで解説されている。https://www.flashair-developers.com/ja/documents/api/uploadcgi/

好みのテキストエディタを使って、MacにマウントしたFlashAirの設定ファイル /Volumes/boot/SD_WLAN/CONFIG を開いて、次の2行を追加する。

APPAUTOTIME=0
UPLOAD=1

編集し終わったらRaspberry Piに戻して、電源を入れ、Macから http://flashair.local/update.cgi にアクセスすると、ファイルをアップロードするインターフェースが表示される(FlashAir APIを使ってもよい)。これで、Raspberry Piの /boot ディレクトリーをWeb UIで読み書きできるようになった。

で、何が便利かというとカーネルいじって遊んでたり config.txt や cmdline.txt の設定を間違えてRaspberry Piが起動しなくなったとき、単なるSDカードだと、いちいちカードを抜き取って、Macに差し替え、設定ファイルを修正してRasPiに戻すという作業が必要になるが、FlashAirならWi-Fi接続で修正したファイルをアップロードできるのだ。

Raspberry Piを使って、スタンドアローンで稼動するキオスク端末みたいなものを作成するとき、テストやメンテナンスにFlashAirを利用するといった使い道も考えられる。

空セクター数の取得

ddコマンドでイメージを書き込んだ直後の、FlashAirのパーティションの状態を見てみると、先頭の小さなFAT32領域と、それに続いてLinux領域の2つが存在するのが分かる。

Mac$ diskutil list
/dev/disk2
#:                       TYPE NAME  SIZE       IDENTIFIER
0:     FDisk_partition_scheme       *15.7 GB    disk2
1:             Windows_FAT_32 boot   58.7 MB    disk2s1
2:                      Linux        2.9 GB     disk2s2

RasPi上でファイルシステムの情報を見ると次のようになっている。FlashAirのWeb UIから見える領域は /boot にマウントされている。

RPi$ df -h
Filesystem      Size  Used Avail Use% Mounted on
rootfs          2.6G  2.0G  469M  82% /
/dev/root       2.6G  2.0G  469M  82% /
devtmpfs         84M     0   84M   0% /dev
tmpfs            19M  204K   19M   2% /run
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs            37M     0   37M   0% /run/shm
/dev/mmcblk0p1   56M   19M   38M  34% /boot

さてここで、FlashAir APIの「空セクター数の取得」を実行してみると、

Mac$ curl http://flashair.local/command.cgi?op=140
76096/114576,512

114576x512=58662912(55.94MB)となっていることから、先頭のFAT32パーティションのサイズを返しているようだ。

ddコマンドで書き込んだままの標準のパーティション構成だと、ちょっとFAT32部分のサイズが小さいが、ちょっと工夫してカスタマイズしてやれば、あんなことや、こんなこともできそうで、いろいろと妄想が膨らむ、楽しい組み合わせ FlashAir + Raspberry Pi である。

妄想と現実

このように、公式に配布されているRaspbian起動用SDカードの標準のパーティション構成だと、FAT32とext4の2つの領域に分かれていて、Linux(ext4)のパーティションはFlashAirからは見えない。

カスタマイズ方法の1つとして、ルートファイルシステムをディスクイメージファイルにし、FAT32パーティション内に置いて、それをループバックデバイスにしてマウントしてやれば、カード全体がFAT32パーティション1つだけ(買ってきたそのままのFlashAir)であっても、Raspberry Piを起動できる。

これなら、FlashAirからLinuxシステムの入れ替えさえも可能となるではないか! と、思ったのだが……

どうもFlashAirアップロードの速度は、ダウンロードに比べるとずいぶん遅く、巨大なイメージファイルの転送には向いていないようだ。

まあ、よく考えると、IEEE802.11b/g/nだと、元々そんなに速いわけじゃないから、うまく思惑通りに動作したとしても、たいそう時間がかかるので、そんなに便利とも言えないだろう。う〜ん、残念。

ともあれ、kernelとかinitrdなんかのカスタマイズ作業をやってるときにはFlashAirが便利なことに間違いはない。

0 件のコメント:

コメントを投稿