October 02, 200810月のToDo
[Timely]
最近更新頻度が落ちてしまい、見にきてくださる方には大変申し訳ない限りです。とりあえず9月末までにこなすべき案件をようやくほぼ処理しきれた(もうすでに10月というツッコミはなしの方向でお願いします)ので、10月にやりたいことでも列挙しておこうかな、という気分になりました。このブログ自体が1記事、1内容という書き方に比較的こだわっているせいもあって、こういう雑記的なことは控えていたのですが、更新頻度が落ちてしまっている今、背に腹は変えられないというのが現状だったりもします(笑)。
自分で言うのもなんですが、予定は未定。格言ですね(笑) October 07, 2008ChumbyでFTDI小さい目覚ましLinuxコンピュータ時計のChumbyで、FTDIのUSBシリアル変換チップ、例えばFT232RLを認識させて、Flashからコントロールしようと考えているのですが、方向性が見えてきたので一旦まとめ記事を作っておきたいと思います。 調べてみると先人によって実験がされていることがわかりました。例えばISHさんのChumby目覚ましリモコン化という記事が大変参考になります。要約を書いておきますと、手順としては以下ののことをされていました。
ポイントとしては、Chumbyに載っているフラッシュプレーヤのソースが公開されていないため、フラッシュからハードを叩く方法がわからないことだと思います。これはChumbyに載っているフラッシュがAdobeとの共同開発で、ライセンスに縛りがあるためのものだそうです。そこでcgiを作成することによって、フラッシュからハードへのブリッジをしているというわけです。 最近の事情(SW 1.6.0/FW 773)ですと、上記のリンクで手作りをしているドライバ(ftdi_sio.ko)が標準でついてくるようになりました。/drivers/ftdi_sio.koというのがそれで、insmodをすることによってFTDIのチップを認識するようになります。とりあえずの動作確認はinsmodをしたときにエラー表示がでないこと、lsmodでftdi_sioが表示されること、FTDIチップをUSBにつないだあと/dev/ttyUSB0が現れることで行いました。 以上述べてきた作業、cgiを入れ込んだり、FTDIドライバを有効にする作業は、Linuxなどに長けている人ならば別に抵抗なくできるでしょうが、ChumbyとFTDIを使って何かをしてくれるだろう人、極端に言うならばArduinoやGainer、XBeeを使って何かしようとしているアーティストの方、にとってはかなり酷な作業かと思います。そこで自動化できないか検討してみようと考えていますが、どうやらUSBメモリスティックにちょっとした細工をすることによって可能になると思います。具体的には、ファイルが存在すれば起動時にカスタムな処理を行ってくれるUSB上のdebugchumbyというスクリプトを(ごにょごにょ)する予定です。 ※Cygwin上でChumbyの開発環境をつくりました。 October 09, 2008CygwinでChumbyの開発環境最近、かわいらしい時計デバイスChumbyと戯れているのですが、困ったことに本家の開発者向けWikiでは、Chumbyの開発環境(クロスコンパイラ)はLinux上で動作するものしか提供されていません。日常作業はほとんどCygwin上で行っていることもあり、わざわざ他のマシンを立ち上げたり、仮想マシンをこさえてLinuxをつくるというのも面倒くさいので、Cygwinで開発環境をつくることにしました。 で、結論として開発環境を"ほぼ全自動"で作ってくれるchumby.makefileなるものを作成しました。適当なディレクトリ上でmake -f chumby.makefileをすると、/usr/local/chumby上に色々とインストールしてくれます。アセンブラ(binutil-2.18由来)やコンパイラ(c,c++でgcc-4.3.2由来)は/usr/local/chumby/toolchain/binに入りますので、実際に使う際はそこへPATHを通してから、ということになると思います。例えばhello.cをコンパイルする際はPATH=$PATH:/usr/local/chumby/toolchain/bin arm-linux-gcc -o hello hello.cという感じです。Chumby本体を使いHello World等いくつかの基本的なプログラムで動作検証を行いましたが、問題なく動作しています。 上のMakefileですが、"ほぼ全自動"というところがポイントで、現状では1回ほど『gmp.h? そんなファイルは見つからねぇ』というエラーを吐いてとまってしまうことを確認しています。その場合はmakeを実行したディレクトリの下に展開されるgcc-4.3.2/BUILD_arm-linux/gcc/Makefileを手動で編集し、その後にmakeの再実行を行ってください。変更するのは、Makefile内に-I../../gmp-4.2.4 -I../../mpfr-2.3.2や-L../../gmp-4.2.4 -L../../mpfr-2.3.2等の記述で、これらを-I../../../gmp-4.2.4 -I../../../mpfr-2.3.2ならびに-L../../../gmp-4.2.4 -L../../../mpfr-2.3.2のように、1段上の親のパスを探すように変更すれば解消されます。automakeやautoconf絡みのエラーのようで、根本から解決するにはどこかのMakefile.inやconfigureを訂正すればよいのではないかと思います。 ※その後、Chumbyだけで設定ファイルを編集できないか検討中です。 October 13, 2008Chumbyだけで設定ファイルを編集時計デバイスChumbyからFTDI経由でマイコン等を操作しようと作業をしていますが、その過程で本体の設定ファイルを書き換える必要があります。しかしながら、Chumbyのファイルシステムcramfsが読み込み専用、かつ、扱うためのツールもChumbyにはインストールされていないため、開発用PCとファイルをやりとりさねばならず、非常に難儀をしいられるのが現状です。そこで今回の記事では、何とかChumby単体でそれをできるような方針を示してみることにします。 通常、Chumbyの設定ファイルを編集するためには以下の手順をとります。
開発用のPCが必要であり、非常に面倒です。そこでUSBメモリ内に必要なツールを全ていれ、USBメモリ内にファイルを展開、編集、さらには元のcramfsに戻すことをChumby単体でできるようにすることを検討してみました。遭遇した問題と対策を以下に箇条書きをしてみます。
作成したツールはchumby_tools_20081020.zipにまとめておきます。USBメモリ等に展開してChumbyでお使いください。なおFTDIを有効化したいだけなのに、上の話を読んでみた結果がこれだよ!!、という方もご安心ください。後日、設定ファイルの書き換えを行い、それをChumbyに反映してくれるような全自動スクリプトを作るつもりです。 October 20, 2008ChumbyにFTDIのシリアルUSB変換チップを認識させるここ最近時計ガジェットChumbyにはまっているわけですが、比較的スムーズにChumbyでFTDIのシリアルUSB変換チップを起動時から有効化させるためのスクリプトが、この度ようやく完成しましたのでお知らせします。まだまだ不親切設計(正常に作業が進行しているのか、作業中不明)なので、中・上級者向けのツールであることをはじめに断っておきたいと思います。なお詳細は『ChumbyでFTDI』の記事をどうぞ。 使い方の説明を以下にします。動作確認をとった環境はChumbyのSW:1.6.0(メニューからSettings - Chumby Infoで確認可能)です。 まず前回の記事『Chumbyだけで設定ファイルを編集』にあるツール類をまとめたzipファイル(chumby_tools_20081020.zip)をダウンロードしてください。それと今回追加で作成したスクリプトのzip(chumby_make_ftdi_activated_ROM.zip)もダウンロードしてください。これら2つのzipファイルを、Windows等で読み書きできる(つまりフォーマットがFATに準拠している)128MB以上のUSBメモリのルートに展開してください。展開後、USBメモリのルートには3つのディレクトリ cramfs_tools, ext2_tools, mount_util と5つのファイル debugchumby, diff, ftdi_activate.patch, patch, zip ができているはずです。 このUSBメモリを電源が切れている状態のChumbyにさし、Chumbyの電源スイッチをいれます。普段と比べて起動までに相当(5分くらい)の時間を要し不安になりますが、ここで内部的に作業が進行しています。その作業が終わると正常に起動するはずです。正常に起動したらChumbyの電源を落として、USBメモリを抜いてください。 最後にそのUSBメモリを電源が切れた状態のChumbyにさし、指で画面を抑えたまま起動してください。『Countinue to PRESS this screen (省略)』なるメッセージがでると思いますが、画面を押さえたままにしてください。少しすると、『loading special option』というメッセージが表示され、画面がカラフルになっていき(ならない場合はChumby自体が問題を抱えている可能性があります、下記参照)、最終的には『Install updates』という選択肢があるメニュー画面になると思います。『Install updates』を選択し、さらに次の画面で『Install from USB flash drive』を選択すると、FTDIデバイスが起動時に有効化されるようにしたバージョンがROMに書き込まれることになります。このときは画面の指示どおり絶対に電源を切らないでください。書き込みが完了すると自動的に再起動しますので、これ以降はFTDIデバイスが起動時に有効化された状態になります。ということで、作業完了です。 なお、『loading special option』でとまってしまう場合はChumby本体のROMにバットセクタが発生している可能性があります。一度、このような状態になって焦りましたが、Chumbyのフォーラムの文章を参考に修正用ファイルをUSBメモリに展開して起動を繰り返したところ、何とか治ったようです。 ※FTDIチップをFlashから叩くため、cgiプログラムを作りました。 October 23, 2008FTDIチップ経由でマイコン等と通信するためのCGILinux時計ガジェットChumbyからFTDIのUSBシリアル変換チップでマイコンをコントロールしようと企んでいます。そこで、大本のコントロールはChumby上で実行できるFlashを考えているのですが、Flashからハードウェアを直接叩くことが満足にできにないので、間にCGIプログラムを噛ませることにしました。そこでできたのが今回のプログラムです(車輪の再発明な気もしないでもないですが、笑)。 ソースはftdi_cgi.cppで、C++で書いてあります。C++ということでバイナリ効率が物凄く悪い(40KBytes近くになりましたorz)ですが、動けばいいので気にしていません。クロスコンパイラのg++(以前の記事『CygwinでChumbyの開発環境』で開発環境を作っているならarm-linux-g++)でコンパイルしてChumbyの/psp/cgi-bin/に転送後、ブラウザからURLを適当に叩いて動作テストをしましたが、動いているようです。 非常に単純で、URLに送信や受信設定を書いて送ると、ポートをその通りに制御するまでのプログラムです。例えばhttp://cumby_url/cgi-bin/custom/ftdi_cgi?to=10&bl=0&push=00010203&pull=4のようなURLでアクセスすると、読み出しタイムアウト10[0.1sec]、最低読み出し待ち文字0バイト、送信文字列4バイト{0x00, 0x01, 0x02, 0x03}、受信期待文字バイト数4バイト、といった具合です。 次はFlashなので、ActionScriptを久しぶりにやるか、といったところです。 ※Chumbyでも使えるもっといい方法があるようですぜ。 October 26, 2008ChumbyでArduino等をFlashからコントロールする方法 (XMLSocketが使える?)時計デバイスChumbyと戯れています。前回の記事『FTDIチップ経由でマイコン等と通信するためのCGI』では、Chumbyに接続したFTDIのUSBシリアル変換チップを経由して、更にその先に繋げたマイコンのコントロールをcgiプログラムを使ってFlashから行おう、というものでしたが実はもっといい方法があるようです。今回の記事ではその方法を紹介しようと思います。なお手元にArduino等の環境がないので、この方法自体の完全な検証が済んでいないことを記しておきます(どなたか貸してください、笑)。 方法ですが、サーバを立ててFlashとソケット通信を確立します。これはデスクトップPCでよく行われている、Flashからシリアルポートをたたく方法(TECH Matari 『Flash(AIR)でシリアル制御する方法まとめ』によくまとめられています)なのですが、この方法は前回紹介したcgiプログラムを使う方法に比べて、1) 接続が保たれるので、受信に素早く簡単(=コールバック関数を使える)に対応できる(cgi版ではいちいち一定間隔ごとに受信ありますか?と尋ねにいく必要あり)、2) 負荷が軽い(cgiは起動コストが大きいです)、という利点があります。運用上でセキュリティによる制限を考慮する必要があるものの、それでも魅力的です。 じゃあなんで前回のcgiを使う方法を紹介していたかというと、Chumbyのフラッシュプレーヤは貧弱でXMLSocketなどできないと思っていたからです。現在Chumbyが対応しているのはFlash Lite 3、つまりはストリーム通信(XMLSocketなど)がサポートされています。よく調べましょう、というオチでした。言い訳をさせていただくと、Chumbyの開発段階で搭載されていたフラッシュプレーヤ(Flash Lite 2の機能限定版)にはXMLSocketがサポートされていなかったことが、本家Wiki(Summaryの項目)で明記されています。 このソケット通信を確立するために使うサーバプログラムですが、Arduino開発環境に付属のserproxyを使ってみることにしました。同じ方法をとっているgainarのFlash用のソース(ソフトウェア・ライブラリのFlash内にあるserial_proxy)をポートしても良かったのですが、こちらはJava+JNI(Java Native Interface)で書かれていたので、Pure CなArduinoに軍配をあげました。少し修正を加えればCygwin上のChumby開発環境でなんなくビルドが通り、またChumby上でも動作しました。後はPC用に作られたArduinoのFlashがChumbyでも走ることを確認できればよかったのですが、これは今後ということにしたいと思います。そういうわけで今回の記事ではserproxyの修正点をまとめたパッチ chumby_serproxy.patchを公開することで、お茶を濁したいと思います。 ※Flash XMLSocket + serproxy (+ 特にArduino Firmata)だと問題が発生するようです。新たにパッチを作ってみました。Flash Socketなら問題ないようです。 |
かれんだ~
スポンサード リンク
|