ひとりぶろぐ

価値ある情報をユーザー視点で発信するブログ

親指サイズの無線LAN内蔵カメラTrek 2000 Ai-Ballをハックする

      2016/03/16

Trek 2000 Ai-BallにUSBシリアル変換アダプタを接続

電池駆動可能な超小型無線LAN内蔵ネットワークカメラ、Trek 2000 Ai-Ball(以下Ai-Ball)について先日紹介しました。

ひとりぶろぐ » 【衝撃映像・どうぶつの森が全滅】親指サイズの無線LANカメラAi-Ballが便利で楽しい

チョロQに載せてチョロQ視点で操作ができ、面白い遊びができました。

DSC01399

▲前回の動画が気持ち悪いと評判だったので、ゆったりとした操作で撮影し直しました。

ファームウェアのファイルの形式から、Ai-BallはARM CPUを搭載し、Linuxで動作するものだということは分かっていました。

Ai-Ballを分解すると基板上にシリアルコンソールの存在を示唆するTXD、RXDのパッドがあったので、USBシリアル変換アダプタを取り寄せて接続してみました。

今回はその顛末について書きました。

結論から言うと、それで面白い遊びを考案するところまでは行かなかったのですが、スキルのある方が面白いことを考えてくれることを願ってやみません。

DSC01618

買ったUSBシリアル変換アダプタは、スイッチサイエンスの「FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)」です。

スイッチサイエンス/商品詳細 FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)

Ai-BallはARM CPUを搭載。回路は3.3Vであることが予想されますので、ジャンパスイッチ一つで5V/3.3V両対応できるこの製品は大変便利です。しかも小さい。(続きは[Read More]から)

Ai-BallのTXD、RXDへの配線

Ai-Ballは分解が簡単。先頭の半球状のキャップは引っ張ると比較的簡単に外れます。
丸いプリント基板が2層になった構造が見えます。

1層目がカメラが付いた基板。Ai-Ballを構成する2枚の基板はコネクタで接続されていて、これも引っ張るとすぐ外れます。
2層目の基板にTXD、RXDのパッドが存在します。

IMG 0576

パッドがあるだけですので、USBシリアル変換アダプタの接続のためには、パッドに配線を直接半田付けする必要があります。

TXD、RXDにそれぞれ配線。少し離れた場所にあるGNDにも配線。

DSC01623

Ai-Ballのメイン基板への電源は1枚目の基板からコネクタを介して供給されていますので、配線が済んだら、外したコネクタを元に戻す必要があります。そうしないとAi-Ballは動作しません。

DSC01619

配線の基板に半田付けしたのと反対側には、ブレッドボードに挿せるようにスズメッキ線を半田付けしてあります。

USBシリアル変換アダプタの動作のために、ドライバをインストール。

Virtual COM Port Drivers

今回はAi-Ballとの通信にTera Term Proを使いたかったので、Parallels Desktop上のWindows XPにドライバを導入しました。

窓の杜 – Tera Term

USBシリアル変換アダプタをブレッドボードに挿せるようにピンヘッダを用意。

DSC01616

これをUSBシリアル変換アダプタに装着します。

DSC01612

ジャンパスイッチを3.3V側に設定。

DSC01614 2

USBシリアル変換アダプタをブレッドボードに挿して、Ai-Ballに半田付けした配線と接続。

DSC01609

接続は以下の図のようにします。Ai-BallのTXDとUSBシリアル変換アダプタのRX、Ai-BallのRXDとUSBシリアル変換アダプタのTXとを接続。GNDはGND同士で接続します。

Skitched 20121117 062016

DSC01607

Parallels Desktop上のWindows XPでTera Term Proを実行。シリアルポートのパラメータは57,600bps 8N1(データビット8bit/ストップビット1bit/パリティビット無し/フロー制御無し)です。

項目 設定
ボーレート 57,600bps
データビット 8bit
ストップビット 1bit
パリティビット 無し
フロー制御 無し

Skitched 20121114 060624

Ai-Ballの電源を入れると、Tera Term ProにAi-Ballのブートメッセージが流れてくると思います。

trek-ai-ball-boot-message.txt

「Web server is ready and listenning…」というメッセージまで行って止まったら、Enterキーを押すと「[Trek@DK \W]\$」というコマンドプロンプトが表示されます。
root権限を持ったシェルです。lsと打てばファイルリストが取得できます。

Screenshot 2012 11 15 0 40 03

Skitched 20121115 043408

一応ファイルシステムは書き込み可能なのでファイル操作が可能ですが、施した変更は電源を切ると元に戻ってしまいます。

[Trek@DK \W]\$ mount
rootfs on / type rootfs (rw)
none on /proc type proc (rw)
none on /sys type sysfs (rw)

Ai-Ballの動作に変更を加えたいならば、ファームウェアを改変して、アップグレードの手順で全体を書き換えるほかないでしょうね。

telnetdの有効化

シリアルコンソール経由での作業はややもっさりするので、telnetdを起動して、telnet経由でログインできるようにします。

まずは /etc/fstab に以下を追記。

none            /dev/pts   devpts  mode=0622    0       0

続いて、 /dev/pts をマウント。

mkdir /dev/pts
mount -t devpts /dev/pts

そして、telnetdを起動。

busybox telnetd -l /bin/sh &

Macからtelnetでログインできました。

Skitched 20121115 045001

この辺りはFlucard Proと同じですね。

Trek 2000 デジタルカメラ対応Wi-Fi機能付きSDカード 16GB Flucard16
Trek2000International
売り上げランキング: 30430

前述の通り、現状では施した変更を永続化していないので、電源を切ると元に戻ってしまいますからtelnetdを使う必要があるならば、毎度シリアルコンソールから操作する必要があります。

ftpdの有効化

ftpdを起動して、ftpでファイル転送ができるようにします。

busybox tcpsvd -vE 0.0.0.0 21 busybox ftpd / &

これも、前述の通り現状では施した変更を永続化していないので、電源を切ると元に戻ってしまいますからftpを使いたくば毎度シリアルコンソールから操作する必要があります。

Ai-Ballのbusyboxは結構アプレットが豊富

Ai-Ball内蔵のbusyboxは、結構アプレットが豊富です。sendmailなども使えます。

trek-ai-ball-busybox.txt

ファームウェアアップグレード失敗からのリカバリ

ここで告白するならば、そもそも、USBシリアル変換アダプタを買ってまでシリアルコンソールを利用しようと思い立ったのは、僕がファームウェアアップグレードに失敗したからです。

Ai-Ballのファームウェアは、ファイルサイズがが6MB弱と小さいながら、アップグレード完了までには長い時間がかかります。
僕は、6MB弱しか無いのに長いこと応答が無いことをおかしく思って、途中で中断してしまったのです。

次回起動時から、電源を入れてもAi-Ballの無線LANのアクセスポイントが見えなくなり、手の打ちようが無くなりました。

このような異常事態下でUSBシリアル変換アダプタをAi-Ballに接続し、Tera Term Proでブートメッセージを覗いてみると、uImageのチェックサムを計算した後「Bad Data CRC」というエラーで起動が中断されていることが分かりました。
中断後、「Trek-SD#」というコマンドプロンプトが表示されます。

こんなアホなことをするのは僕ぐらいかと思いますが、折角なので、レンガ状態からのリカバリで得た知見を共有したいと思います。

このコマンドプロンプトは、恐らくU-Bootを元にしたと思われるオリジナルのブートローダのもの。
このブートローダのことを、Trek-SDと呼びたいと思います。

Trek-SDのコマンドプロンプトから、コマンドがいくつか実行できます。実行できるコマンドはhelpで一覧できます。

Trek-SD# help
?       - alias for 'help'
bootm   - boot application image from memory
cp      - memory copy
go      - start application at address 'addr'
help    - print online help
iminfo  - print header information for application image
loadb   - load binary file over serial line (kermit mode)
printenv- print environment variables
run     - run commands in an environment variable
setenv  - set environment variables

loadbコマンドでシリアル経由のファームウェア転送

OSのアップグレードに失敗し、OSが起動しない状態なので、もちろん無線LAN経由で何かをしたり、Webブラウザを使ってファームウェアのアップグレードをしたりができません。

しかし、Trek-SDのloadbコマンドを使えばファームウェアを転送できそうです。

Trek2000のサポートページからダウンロードしてきたファームウェア、uImage.datをTera Term Proから利用できるところにコピー。

Trek – Infrastructure Mode

Trek-SDのloadbコマンドを実行。「## Ready for binary (kermit) download to 0x40A00000 at 57600bps…」というメッセージが出ます。これでAi-BallをKermitでのファイル転送待機状態にします。

Tera Term Proの「ファイル>転送>Kermit>送信」を実行、するとファイルオープンダイアログが開きます。

Skitched 20121114 051253

uImage.datを指定し、ファームウェアの転送を開始します。

Skitched 20121114 051333

6MB弱ものファイルを57600bpsで転送しようというのですから、かなり時間がかかります。おおよそ45分はかかるかと思います。

Skitched 20121114 055743

終了すると、以下のようなメッセージが出てKermitでのファイル受信待機状態が解かれ、Trek-SDのコマンドプロンプトに戻ります。

## Total Size      = 0x00540718 = 5506840 Bytes
## Start Addr      = 0x40A00000

bootmコマンドで転送したファームウェアから起動

転送が終わったら、今転送したファームウェアからの起動を開始します。

起動はbootmコマンドでできますが、起動前にAi-Ballの電源スイッチをスパナの位置にしておきます

DSC01635

loadbコマンドでファームウェアを転送完了したのでこれで一件落着のようですが、この状態で電源を切って再度起動しようとすると、転送したファームウェアに対して、ブートローダが例の「Bad Data CRC」エラーを出して起動できません。

正規の手段でファームウェアを転送しないと、ファームウェアが正しいものかどうかをチェックするためのチェックサムのデータが更新されないようなのです。

loadbコマンドでファームウェアを転送後、一回だけ、bootmコマンドで起動が可能ということです。

この一度の機会を利用して、Ai-Ballを設定モードで起動し、さらにファームウェアアップグレードモードに移行します。

Skitched 20121110 174002

ファームウェアアップグレードを開始すると、Ai-Ballがリカバリモードとなって、通常モードでは起動しなくなります。

Skitched 20121110 174231

リカバリモードとなったAi-Ballに接続。BASIC認証が求められますが、その際はユーザ名「user」、パスワード「pass」でログインします。リカバリモードでも、Ai-BallのIPアドレスは192.168.2.1です。

Webブラウザを使って正規の手段でファームウェアを転送。

Skitched 20121110 181742

これでリカバリが完了します。従って、loadbコマンドでファームウェアを転送した後、bootmコマンドで起動する前に、Ai-Ballの電源スイッチをスパナの位置に設定しておくことは非常に重要です。

これを忘れて通常モードでAi-Ballを起動してしまったら、またloadbコマンドで45分かけてuImage.datを転送するところからやり直しです。

Webブラウザからファームウェアのアップロードを開始したら、Webブラウザに完了のメッセージが出るまで放っておきましょう

 - Android, iPad, iPhone, Linux, ガジェット