2012年5月2日水曜日

flucard でinfernoを動かす

flucard
http://www.flu-card.com/jp/
というSDカードがあります。
これ自身が無線APとなり、デジタルカメラに入れっぱなしでもネットワーク経由で
画像を取り出せるという便利グッヅです。

なお、中身はlinuxであり、telnetでアクセスできたりと
いろいろできるようで、ちょっと前に話題になっていました。
ものすごい熱を発するのでカメラに入れるのはちょっと躊躇してしまいますが、
最小のLinuxマシンとして興味が湧いたので購入しました。

Telnetでログインできることを確認できたので、本題です。
arm-linuxあるところにinfernoあり、ということで、
infernoのポーティングです。
文鎮化が怖いので、 native infernoのポーティングは出来ませんが、
hosted infernoなら行けそう。

目標は、flucardでinfernoを動かし、styxでマウントして
画像を取り出すことです。

・ビルド環境構築

Qemu上のarm-linuxでセルフビルド(あるいみクロスビルド?)を行いました。
Qemuの環境構築については
http://inferno-hell.blogspot.jp/2011/10/qemuarm.html
http://inferno-hell.blogspot.jp/2012/04/lenny-no.html
 あたりを参照。
特に変更は無いはず。

infernoビルドに必要なソフトウェアをapt-getでインストールし、
infernoのソースツリーを持ってきます。
詳細は
http://inferno-hell.blogspot.jp/2011/10/wm.html
このへん。

ーーーこっから嘘情報ーーー
ただし、ソースツリーはtrunkではなく2009年あたりのIPv6対応前のものとします。
hg clone https://inferno-os.googlecode.com/hg/
hg update a682517fc1ec
IPv6対応にすると、host osがv6に対応していないためか、ネットワークアクセス時にエラーとなるようです。
このリビジョンの根拠は、infernoのipv6対応に関するissueが193にあり、日付から、
これより前のリビジョンで当たりをつけました。

最新のツリーとは若干ビルド方法が異なり、
mkconfig編集
パス通す
Linux/arm/bin,lib ディレクトリをそれぞれ作成(無いとエラーになる)
./makemk.sh実行
mk CONF=emu-g install (mk mkdirsはしない)
といった感じでした。
ーーーここまでーーー

ーーー追加ーーー
mkの前に、ipv6のOFFのための作業がいります。
emu/Linux/emu-gを編集し、
ipif6-posixをipif-posixに変更します。
で、./makemk.sh; mk mkdirs; mk CONF=emu-g install
としてビルド。
ーーーここまでーーー

Linux/arm/bin/emu-gが出来上がります。
ldd emu-gでこのプログラムが必要としているライブラリを確認し、
/lib以下の該当ファイルをとっておきます。

・flucardにinferno環境構築

flucardをパソコンに取り付け、infernoのファイルを配置します。

/sd/
  emu-g    ... inferno本体
  lib/         ... ライブラリをおいておく
  inferno/  ... infernoのルート。qemuからもってくのが面倒だったのでOSXから持っていった
  mkln.sh   ... ライブラリのリンクを貼るスクリプトを作成

こんな感じで配置をします。
mkln.shの中身は

#!/bin/sh
ln -s /mnt/sd/lib/ld-linux.so.3 /lib/
ln -s /mnt/sd/lib/libgcc_s.so.1 /lib/
ln -s /mnt/sd/lib/libpthread.so.0 /lib/
ln -s /mnt/sd/lib/libc.so.6 /lib/
ln -s /mnt/sd/lib/libm.so.6 /lib/

といったところ。sd/lib以下のファイルのリンクを/libに張ります。

・flucard上でinferno 起動

flucardをカードリーダーにさして電源を投入するとAPになります。
パソコンでそのAPに接続し、
192.168.1.1にtelnetログインします。
/mnt/sdにSDカードの内容が見えます。
cd /mnt/sd
./mkln.sh
./emu-g -r inferno
でinfernoが立ち上がります。

infernoのシェルで、
bind -c '#U*' /n/local
listen -A tcp!*!1024 {export /&}
と実行します。1024はとりあえずのポート番号で値はなんでもいいです。
これでflucardのSDの中身がstyxで公開されました。

・パソコン側のinfernoの操作

flucardのAPにつながっているパソコンでinfernoを立ち上げます。
絵を扱うのでwm/wmを起動しておきます。

シェルにて
mount -A tcp!192.168.1.1!1024 /mnt
とすると/mntにflucardがマウントされます。
/mnt/n/local/mnt/sd/
にSDカードが見えます。
この中の画像ファイルを探し、

wm/view ファイル名(小文字に直す)

としてやると、画像が表示できます。lsするとファイル名は大文字ですが、そのままだとviewが画像と思ってくれないので、小文字で指定します。





styxで無線経由で画像を取り出せるとは、胸が熱くなります。



ところで、flucardにはウェブインターフェースがあるから、
ウェブ経由で画像を取り出せばいいじゃん、という意見もあるかと思いますが、
まったくそのとおりなのです。
flucardにinfernoいらないじゃん。


charonで192.168.1.1に接続。
残念ながらcharonでは直接画像は表示できませんでしたが、
画像のダウンロードは可能でした。


ところで、画像の縮小表示ってどうやるんだろうね。

AVRでCFタイプのLANカードを制御しようと思ったが

AVR関連で面白いネタを見つけました。

AVRで動かすWebサーバ

というページなのですが、AVRにPCカードタイプのLANカードをさして
サーバーを立てるという試みです。
感銘を受けたため、 自分も真似することにしました。
手元に各種CF/PCMCIAのカードがあったので、機材には困りません。
調べてみると、どれもNE2000互換のカードばかりで、参照元ページとは制御が異なりそうです。

まずはPCカードの基本について書籍で学び、
AVRのピン割り当てを考えました。
Arduinoベースなのでピンアサインはいろいろ悩みました。

で、ピン配置も決まり、そろそろ配線するか、という段になり、
リード線をカードにさしこもうとしたところ、、、





ぬう、リード線がささらない、、、

完。