CloudFlash を無線LANルータに接続して使う(ネットワーク参加させる)

CloudFlash をデジカメではない環境で動かそう | Moonmile Solutions Blog
http://www.moonmile.net/blog/archives/6277

の続きです、CloudFlash は WiFi のホスト機能を持っていてデフォルトで SSID が「Cloud Flash」にして接続ができます。多少チープな環境ですが、写真をダウンロードできる web サーバを積んでいるので、ブラウザから写真がダウンロードできて便利です。
普通は、デジカメに CloudFlash を差して使うところですが、私の場合は SD カードをリーダを使うことで「単体」で CloudFlash を動かします。…意味があるのかどうかは不明ですが(苦笑)、ひとまず、

  • 特別な機器なし(カードリーダーは必要だけど)に WiFi 付きの Linux 環境が使える。
  • ストレージは SD メモリで拡張できるので、うまくやれば .NET が動く?
  • 初代 Surface からターミナルで接続しよう

ってのが目標です。

■CloudFlash を無線LAN 環境に参加させる

デフォルトでは、CloudFlash がホストになっていますが、これだといちいちノートPCやスマートフォンの接続先を変更しないので少々面倒です(逆に外にいるときは便利なんですけど)。なので、既存のネットワークに参加させるように設定し直します。

設定自体は、日経Linuxの2014/08号を参考にするか、以下の記事を読み進めます。

Flucard Pro – Wi-Fi 機能搭載 SD カードを Linux サーバーとして楽しむ方法
http://netbuffalo.doorblog.jp/archives/4811269.html

普通はネットワークに接続するだけでは意味がないので、自動起動時にスクリプトを動かすようにするのですが、単純に WiFi させるだけならば以下のスクリプトを autorun.sh にして SD メモリのルートに置きます。

– autorun.sh
– APP/wifi.conf
– APP/wpa.conf

#!/bin/sh

APP_HOME=/mnt/sd/APP
LOG=$APP_HOME/log.txt
SCAN=$APP_HOME/scan.txt

# echo "---" >> $LOG
# date       >> $LOG
# ifconfig   >> $LOG

. $APP_HOME/wifi.conf
ifconfig mlan0 down
sleep 3
a1 
sleep 3
ifconfig mlan0 up || exit 1
sleep 3

wpa_supplicant -i mlan0 -B -c $APP_HOME/$WPA_CONF
ifconfig mlan0 $IPADDR netmask $NETMASK  
route add default gw $GATEWAY  

sync
exit 0

起動時の動作は適宜 APP/log.txt に書き込んでいるのですが、Windows のドライブとの同期がうまく取れないときがあります。そのような時は、一度 SD カードを抜き差しして再度確認してください。一応 sync で同期させているのですが、完全ではないようです。

ESSID_NAME=<接続先のSSID>
WPA_CONF=wpa.conf
BOOTPROTO=static
IPADDR=172.16.0.99
NETMASK=255.255.255.0
GATEWAY=172.16.0.1
network={
	ssid="<接続先のSSID>"
	key_mgmt=WPA-PSK
	proto=WPA
	pairwise=TKIP
	group=TKIP
	#psk="<password>"
	psk=ff2ba81ca3ce58f606fd99998cf54271d3af00f36b371b235b7f53c0438e51a8
}

ひとまず固定IPにしてネットワークに参加させます。wifi.conf と wpa.conf の書き方は Linux 系のネットワークを調べるとよいでしょう。通常の Linux のものがそのまま使えます。

どうやら、autorun.sh スクリプト内にある a1 スクリプトが肝で、カーネルライブラリをロードしているようです。他にも w1 というスクリプトがあるので、どちらかを使えばいいんでしょう。

# cat a1
ifconfig mlan0 down

insmod /lib/ar6000.ko
sleep 1
insmod /lib/ka2000-sdio.ko
sleep 1
#iwconfig mlan0 txpower 8
#ifconfig mlan0 up
#dev=ath0
dev=mlan0

#iwpriv $dev version
#iwpriv $dev httxcfg 0x62
#iwpriv $dev htcapinfo 0x1820000

# cat w1
#insmod /mnt/sd/ka2000-sdio.ko
insmod /lib/ka2000-sdio.ko

#iwpriv mlan0 version
#iwpriv mlan0 httxcfg 0x62
#iwpriv mlan0 htcapinfo 0x1820000
#

こうすると、無線ルータにネットワーク参加して「172.16.0.99」で接続ができます。CloudFlash 自体は telnetd が自動で起動されるようになっているので(スクリプト自体は、/etc/init.d 内にあります)、tera term などで接続が可能です。ただし、ユーザー名、パスワードがない状態なので、社内 LAN などの公共のものに接続する場合は注意してください。中身が覗けてしまいますから。

■busybox が使われている

CloudFlash のメモリは 30MB弱しかありません。

組み込み Linux & 簡易 Web サーバーとして動くので、まあこれで十分といえば十分です。コマンド自体は組み込み用の busybox が使われているので、うまくマウントしてやれば機能を増やすことができます。SD カードのストレージ自体はたくさんありますから。
ストレージを活用して、Ruby を入れている例もあるので、ひょっとすると .NET Framework が乗るかもしれません。ARM で動いているそうなので、Raspberry Pi でビルドしたものを持ってくるか、QEMU 環境でビルドしたものをコピーすればよいでしょう。

■ファイル等は Windows からコピーできる

autorun.sh 等のファイルは、Windows PC からコピーできます。普通に SD メモリカードを USB リーダーに差し込んで PC に接続すればドライブとして認識がされます。

CloudFlash では /mnt/sd の環境が、SD メモリのルートになります。ここに適当にフォルダやファイルをコピーして起動時に、ln -s 等してやれば Ruby などを動かすことができます。CloudFlash の中身自体は ROM になっているので、起動時にこの作業が必ず必要になります。

ちなみに date 自体は起動時に 2012-1-1 にリセットされているようで、日付をチェックするにはちょっと特殊な操作が必要かもしれません。

また、ファイル自体は FAT32 フォーマットなので、Linux 特有のグループ設定などはできないと思われます。

■元の WiFi 環境に戻すにはどうするのか?

ブラウザを使って Auto WiFi を OFF にすることはできたのですが、元の ON に戻すには(CloudFlash を WiFi のホストとして機能させるには)どうしたらいいのかと悩みました。何故か、どこにも書いていない。
と思ったら、実は簡単です。

SD メモリカードをクイックフォーマットすれば OK です。

初期状態では、WiFi のホストとして機能しているので、確かにそうだった。結構悩んで、元に戻す設定を3時間ほど探していました。フォーマットすると JPEG などの写真データも一緒に消えてしまうので(フォルダ等が残っている状態でも駄目なようです)、きれいさっぱりフォーマットします。どうやらクイックフォーマットでよさそうです。実験としてはホスト用とネットワーク参加用の2種類のメモリカードを用意しておけばよいでしょう。
CloudFlash 自体のリセットは、SD カードリーダーに抜き差しすることで可能です。10秒ぐらいまてばいいみたいですね。

カテゴリー: 開発 パーマリンク