WPtapによるモバイルデバイス対応
GW前半は色々と敗北感にまみれた3日間でした。やるべき事をかなりこなした一方で、Ubuntuがらみは進展が良くないです。あれとかあれとか…。
Blackfinもほとんど触れなかった。
さて、懸案の一つだったバックアップサーバーの仮想化をやりました。以前書いたように、このサイトはUbuntu上のXAMPPにクローンを作っており、各種実験の前にこて試しを行う事にしています。ところが、先日Ubuntuが原因不明の起動不良を起こし、完全入れ替えになったのです。結果的に、クローンを失ってしまいました。
そこでこれを期に、仮想マシン上にクローンを再構築しました。ちょっと手間取りましたが、無事終了。ついでに行ったのが、モバイルデバイス対応です。
このサイトは、AndyBlueというテーマを使っていますが、スマートフォンなどから見ると、PC用の画面がそのまま小さく表示されます。それでは困るので、モバイルデバイスを検出してテーマを自動変更してくれるプラグインを導入しました。使ったのはWPtapで、「多数デバイスに対応させる事も可能なモバイル自動対応WordPressプラグイン・WPtap」を参考にしました。
正直設定は難解というか、説明不足感にあふれているプラグインですが、動いてしまえば効果は抜群。
スマートフォンから見やすいDSP空挺団をお楽しみください。
x86シミュレータを使ったAndroid開発環境
ちょっと興味があったので自宅のWindows機上にAndroid開発環境を構築しました。少しアクロバティックですが、快適に動きます。
- 開発環境自体はVMware上のUbuntu 12.04 LTS (beta)。
- Eclipseで開発する。
- シミュレータはADTを使わず、Ubuntu上のVirtual Box上で走るAndroid x86 4.0 (Ice Cream Sandwich)を使う。
Androidの公式サイトが薦める方法では、ARMシミュレータ上でAndroidを走らせてアプリケーションのテストを行います。しかし、これが遅すぎて耐えられないという意見をよく聞きます。
今回、Android x86 をVirtualBox上で動かすことで、ストレス無くアプリケーションを試験できる環境になりました。また、開発環境自体はVMwareの仮想マシン上で動いているため、ホストのWindowsに影響を与えません。
以下、構築方法を簡単に紹介します。
Ubuntuインストール方法のアップデート
先週アップロードした、USBメモリへのUbuntuインストール方法をアップデートしました。アップデートした内容は
- 日本語入力の追加方法
- 細かい記述の修正
です。
ダウンロードは先日のエントリからどうぞ。
USBメモリへのLinuxインストール方法
USBメモリにLinuxをインストールする方法を文書にまとめました。30ページ。おかしい。2,3ページにまとめようと思っていたのですが…。
USBメモリへLinuxをインストールする方法は、ネット上に多く解説されていますが、内容が古かったり、Live CDであったり、少々危険を伴ったりと内容はまちまちです。
この文書では、
- 安全、安心なインストール方法
- 暗号化されたセキュアなホーム・ディレクトリ
- Live CDではなく、完全なインストール
- VMwareからも仮想マシンとして使える
事を目指した、ブート可能なUSB メモリLinuxの構築方法を解説しています。
ダウンロード : USBメモリへのUbuntuのインストール (PDF 1.6MB)
BF592のUARTブート方法
ADSP-BF592のUARTブートに成功したので方法を記しておきます。
UARTブートはJTAG-ICEを使わずにPCからBlackfinをブートできる便利な方法ですが、当然PC側に何らかのホストプログラムが必要です。つまり、Blackfinにあわせて実行プログラムをUARTから送り込んでやる、ホストプログラムです。
ちょっと前からJavaやPythonで組めないかなと探っていたのですが、簡単な実験に成功した後に気づきました。Blackfin Koopの配布パッケージに含まれています orz 。
LDRファイルを作る
bfin-elf-ldrは、ELFファイルからBlackfinのロードファイル(LDR)形式のデータを作り出すプログラムです。しかしながら、このプログラムにはもう一つの顔がありました。LDRファイルをUART経由で送信する仕事です。はい。問題解決ですね。
ADSP-BF592を例に取りましょう。私はACB-BF592とUB-232Rをブレッドボード上に組んで実験しました。
最初にBF592上で動作するELFファイルを用意します。私はTOPPERS/JSP for Blackfinでsample1をビルドしました。生成したファイル名はjspになります。拡張子はありません。
これをコマンドライン上で次のように実行して変換します。
$ bfin-elf-ldr -T BF592 -c jsp jsp.ldr
これで、LDRファイル、jsp.ldrができあがります。-TオプションはターゲットプロセッサがBF592であることを指示し、-c オプションはLDRファイルを作ることを指示しています。
LDRファイルをターゲットにロードする
次に同じbfin-elf-ldr コマンドを使って、今作ったLDRファイルをターゲットのBF592にロードします。ターゲットをリセットしてから以下のコマンドを実行してください。
$ bfin-elf-ldr -l jsp.ldr /dev/ttyUSB0 -b 57600 -C
-l オプションは、LDRファイルをUART経由でBlackfinに転送することを指示しています。jsp.ldrはファイル名、 /dev/ttyUSB0は、ホストがBlakcfinとの通信に使うシリアル・ポートです。この例ではLinuxですが、Windowsでも動作するようです。
-bオプションは、通信に使う速度を指定します。実は-bオプションを指定しない場合、通信速度は115200baudですので、上の例では遅い速度を指定しています。これは別にトラブル回避ではなく、プログラムが無事動作した際に、bfin-elf-ldrが通信回線上のデータを文字化け無く端末に表示できるようにとの配慮です。
bfin-elf-ldrはターゲットのロードが完了したら実行を停止してコマンド・プロンプトに戻りますが、直前の受信バッファのデータを端末に表示してから終了します。TOPPERS/JSP for Blackfinのシリアル通信はデフォルトで57600baudであるため、文字化けがないよう上の設定をしています。
-Cは、CTS/RTSハンドシェイクを行うための指示です。BlackfinはLDRファイルを展開する際、一時的に受信不能になることがあります。これによるデータの取り落としを避けるため、ADSP-BF592は#HWAITピンによるハードウェア・ハンドシェイクに対応しています。#HWAITとUARTデバイスの#CTSを接続し、抵抗でプルアップして使用します。
引数は大文字小文字を区別しますので気をつけてください。問題無く動作した場合には以下のように出力されます。プログラムのブート後、sample1がテキストを出力し始めたことが見て取れます。
参照文献およびツールバージョン
- toolchain::ldr-utils Blackfin Koopの資料。
- 実行環境
- Ubuntu 12.04 LTS beta 2
- Blackfin GCC Tool-chain 2011R1RC4
UARTブートのシグニチャを確認
ACB-BF592で以前UARTブートの実験をしていたのですが、BF592が返すはずのシグニチャが返ってこず、頭を抱えていました。
その後、しばらくほったらかしになっていたのですが、本日つつき回してようやく原因が判明。私の配線ミスでした。何てこったい。
根本原因は、古いドキュメントを参照していた事で、そのため、/reset ピンの位置を間違って認識しており、BF592がリセットされない状態になっていたのでした。
は配線を変更して正常動作を確認しています。
次は実行プログラムをUARTから送り込むローダー・プログラムですが、Java書くかPythonで書くか思案中です。ちなみに、どちらの言語も、アプリケーションを書いたことがありません。
Gitサーバー
今週、ツイッターに「バージョン管理システムでエロ画像を管理すれば、見つかる心配が無い」というつぶやきが流れてきて大笑いしました。見終わったらブランチを変えればいいわけです。頭良すぎます。
さて、偶然ですがちょうどTOPPERS/JSP for Blackfinのバージョン管理システムをGitに変更しようかと検討中でした。そんなわけで、上のつぶやきが流れてきたときに、ふと立ち止まって考えてみました。
もともとバージョン管理をしたいのはプログラムだけにとどまりません。プログラムの場合、開発-デバッグといった作業に意味づけしやすいことやIDEを使う事などもあって、バージョン管理システムを使う様子を想像しやすくはあります。しかし、一方でWordやPowerPoint、CADなどの文書系ソフトウェアについてもバージョン管理をしたいという動機が強くあります。
考えれば考えるほど、通常のファイルシステムにバージョン管理を導入するのは合理的です。それほど合理的で厳密なブランチ管理をしなくても、ざっくりしたコメントを残しながらバックアップを取るものでかまわないのです。そう、これはバックアップソフトでもかまいません。しかし、バックアップは通常決められた周期で日付だけをタグとして自動で行います。バージョン管理は手元でさっとコメントを残して意味のあるコミットをとれることが利点です。
そこで調べてみたのですが、どうやらGitはサーバーを立てなくてもリモート・ファイルシステムにリポジトリを置くだけで運用することができるようです。
これは画期的なことです。現在ではUbuntu OneやDoropBoxといったギガバイト単位で使用できる無料ファイルシステムがいくつもあります。こういったリモート・ファイル・システムにリモート・リポジトリを置いておき、手元のコンピュータにそのクローンを作れば、高速でしかも場所を選ばないバージョン管理が可能になります。
WindowsにはTortoiseGitという、Explorerと一体化可能なGitがあります。これは日本語のファイル名さえ避ければいいので便利に使えそうです。
オープンソースソフトウェアの育て方
TwitterでAnalog20さん(Ganさん)にお奨めされて読んでみました。薦められたのが原著なのに読んだのが日本語なのはご愛敬。
正直、関わっているプロジェクトの規模が違いすぎて参考にならない点も多いのですが、二三、反省すべき点がありました。
これまで、あまりにもプロジェクト外部でプロジェクトの運営の話をしたのは、明らかに私の間違いです。まぁ、作業記録くらいならともかく、今後はプロジェクトの進行などについて話をする場所はプロジェクトの公式掲示板にします。
その他、コードレビューをちゃんとしろとか、耳の痛い話もありあました。
カメラとWiFiなら飛ばさなきゃ
今月号のトラ技、実はまだ買っていませんがSirius506さんのカメラの記事がどうやら人気のようです。でもって、Blogの方では撮影した画像を飛ばすためにEye-Fiの準備が進行中。
大変軽いシステムになりそうなので、是非とも凧につるしてカイト・フォトグラフィーで遊んでいただきたいです。最近だと気球に入れて飛ばすのが注目されているようですが。
本当は私もいずれカイトフォトグラフィをやろうと思っていたのですが、ずるずると先延ばしにするうちに、世間ではDSPなんぞ使わなくてもできるようになっていたのでした。ちゃんちゃん。
テンション上がり気味
昨年末に「2191空挺団/Blackfin空挺団」を仕切り直す形で開設した当サイトですが、2ヶ月半ほどの間に24件のエントリを投稿しました。うち数件はうち数件はWordPress関連のTIPSですが、主にDSP、TOPPERS/JSPに関して順調に投稿が伸びています。
うまいこと更新意欲がわいている理由のひとつは、WordPressの使い心地でしょうか。もともと非常に完成度の高いCMSソフトで設置が簡単な上に、メンテナンス方式も充実。おまけにLive Writerでオフライン執筆まで可能と、いいことづくめです。
もう一つはいいタイミングで手に入った金子システムのACB-BF592です。ブレッドボードに挿して使えるこの基板、取り回しの良さが気に入って、ついついTOPPERS/JSPの移植などに手を付けてしまいます。本当はLPC1768のTOPPERS/ASPのデバッグなんかが残っているのですけどね。そっちの方は工作会でもない限り手を付けそうにない気分です。
本当はACB-BF592に関してはAmakusaと組み合わせて使うCPUボード、Yakushimaを組み立て済みでいつでも使えるのですがブレッドボードの気安さでついついYakushimaは触らずじまいです。Uzumeが動くまでYakushimaの出番は無いかもしれません。