LabToolのソフトウェアをMac OSXでビルドする
前回からちょっと間が空いてしまいましたが、LabToolネタの続きです。改めましてLabToolについてですが、NXP/Embedded Artistsによって発売されている、ロジックアナライザやオシロ、シグナルジェネレータ機能を持つモジュールです。LPC-Link2というデバッガボードにアドオンすることで、これらの機能を実装しています。LPC-Link2とは、本来はJTAG等を使うためのデバッガインターフェースですが、汎用ボードとして使えるようにいくつものコネクタで、信号が外部に引き出されています。これに搭載されているMCUは、Cortex-M4/M0/M0というマルチコアARMのLPC4370というチップです。80MspsのADCを持っていたり、サブコアとしてCortex-M0を2つ搭載しているなどちょっと変わった機能を持っています。このMCUの機能を活用した例がLabToolということのようです。
LabToolを動作させるためには、ホスト側のPC等にソフトウェアが必要です。前回書いたように、ソースコードはオープンソースとして公開されており、Windows用とRaspberry Pi用については、すぐ使えるバイナリが提供されています。Raspberry Piを標準プラットフォームとして選択したということのようです。ところが、普通のPC向けLinuxやMac OSXには残念ながらバイナリは用意されていません。ソースコードをざっと眺めてみたところ、Mac OSXについても動作させることができそうでしたので、チャレンジしてみました。おおむね問題なく動作させることができているようですので、その手順を示したいと思います。
ソフトウェアはGUIツールキットとしてQtを使用しています。そのため、Qtの開発環境を準備する必要があります。開発環境をセットアップする方法はいくつかありますが、qt-project.orgからダウンロードするのがもっとも簡単だと思います。他にnokiaからもSDKが提供されていますし、brewで環境をセットアップする方法もあります。
今回はqt-project.orgからダウンロードしたQt-5.2を使用してみます。サイトのダウンロードページから、"Qt Online Installer for Mac (9 MB)"をダウンロードします。
qt-mac-opensource-1.5.0-x64-online.dmgを開き、インストーラをダブルクリックしてインストールを進めます。
ウィザードに従ってQtのインストール作業を進めますが、ダウンロード(400MByte弱)しながらインストールするので、完了するまでにはそれなりに時間がかかります。
他に必要なモジュールとして、USBアクセスのためのlibusbを用意する必要があります。今回はlibusbxを使用してみました。libusbxはbrewでインストールします。brewを使う場合にはbrew updateしてから作業したほうが良いようです。libusbがすでにインストールされている場合はコンフリクトしますので、事前にunlinkしておきます。
$ brew update
$ brew unlink libusb
$ brew install libusbx
その他、labtoolの動作にdfu-utilが必要になりますので、これもbrewでインストールしておきます。
さて、ツールやライブラリの用意ができたら、ソースを準備してビルドします。ソースはgithubから取得します。
$ git clone https://github.com/embeddedartists/labtool
コマンドラインからビルドする方法もありますが、今回はQt Creatorでビルドしてみます。/Applications/QtフォルダにインストールされたQt Creatorを起動します。
Qt Creatorを起動するとこのような画面が表示されます。
ここで'Open Project...'ボタンを押して、ダウンロードしたソースコードにあるlabtool/app/LabTool.proを開きます。
libusbxのパスを設定するためにプロジェクトファイルを一部修正します。LibTool.proをダブルクリックして開き、INCLUDEPATHの設定にMac OSX用の設定を追加します。
INCLUDEPATH += . win32:CONFIG(release, debug|release): LIBS += -L$$PWD/libusbx/MinGW32/dll/ -lusb-1.0 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/libusbx/MinGW32/dll/ -lusb-1.0 else:mac: LIBS += -L/usr/local/Cellar/libusbx/1.0.17/lib -lusb-1.0 -lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation else:unix:!symbian: LIBS += -L$$PWD/libusbx/Linux/ -lusb-1.0 -ludev
書き換える内容は、pkg-configで確認することができます。
$ pkg-config --libs --static libusb-1.0
-L/usr/local/Cellar/libusbx/1.0.17/lib -lusb-1.0 -lobjc -Wl,-framework,IOKit -Wl,-framework,CoreFoundation
準備ができたらビルドですが、念のため左下の設定ボタンを押して、Qtバージョン(4.8.1)とターゲット(Debug)を確認します。
ワーニングは出ますが、最後にステータスがグリーンになることを確認します。
ビルドが成功すると、LabTool-build-desktop-Desktop_Qt_4_8_1_for_GCC__Qt_SDK__Debugというフォルダができ、その中にアプリがLabToolという名前で完成しているはずです。
さっそく起動してみたいところですが、LabToolと接続して動作させるためには、ファームウェアを用意し、書き込みのためにdfu-utilが使えるようにしておく必要があります。そのため、ファームウェアとdfu-utilを所定の場所にコピーしておく必要があります。
ファームウェアは、サイトからlabtool_binaries_2013-10-30.zip (84Kb) をダウンロードして展開し、firmware.binをlabtoolフォルダにコピーしておきます。
一方dfu-utilは、toolsフォルダ内のdfu-util-0.7-binaries/linux-i386フォルダ内に、brewでインストールしておいたdfu-utilのバイナリをコピーしておきます。
$ cp /usr/local/bin/dfu-util tools/dfu-util-0.7-binaries/linux-i386
起動前にLabToolをUSBで接続しておきます。
ファームウェア書き込みの関係で、最初はカレントディレクトリをlabtoolとしてコマンドラインから起動する必要があります。
$ cd labtool
$ LabTool-build-desktop-Desktop_Qt_4_8_1_for_GCC__Qt_SDK__Debug/LabTool.app/Contents/MacOS/LabTool Using libusbx v1.0.17.10830 Initializing library... Failed to open device 1FC9:0018 Opened device 1FC9:0018 [Probe] bus: 253, port path from HCD: 1 ->2 [Probe] speed: 480 Mbit/s (USB HighSpeed) [Probe] Reading device descriptor: [Probe] length: 18 [Probe] device class: 0 [Probe] S/N: 0 [Probe] VID:PID: 1FC9:0018 [Probe] bcdDevice: 0100 [Probe] iMan:iProd:iSer: 1:2:0 [Probe] nb confs: 1 [Probe] Reading configuration descriptors: [Probe] nb interfaces: 1 [Probe] interface[0]: id = 0 [Probe] interface[0].altsetting[0]: num endpoints = 2 [Probe] Class.SubClass.Protocol: FF.FF.FF [Probe] endpoint[0].address: 85 [Probe] max packet size: 0200 [Probe] polling interval: 01 [Probe] endpoint[1].address: 02 [Probe] max packet size: 0200 [Probe] polling interval: 01 [Probe] Reading string descriptors: [Probe] String (0x01): "Embedded Artists" [Probe] String (0x02): "LabTool" [Probe] MCU PLL is running at 200 MHz Calibration data: V/div A0 A A0 B A1 A A1 B ------- ---------- ---------- ---------- ---------- 20mV 0.0994865 -0.0000555 0.0943872 -0.0000512 50mV 0.2614163 -0.0001324 0.2559450 -0.0001310 100mV 0.5064960 -0.0002560 0.5089394 -0.0002563 200mV 0.9960396 -0.0004950 0.9962217 -0.0004955 500mV 2.7654913 -0.0013694 2.8068729 -0.0013746 1000mV 5.4500269 -0.0026867 5.5113330 -0.0026983 2000mV 10.2890467 -0.0050710 10.3855975 -0.0051073 5000mV 22.3351648 -0.0109890 22.4448124 -0.0110375 Device connected
最初に、Failed to open device 1FC9:0018と出ていますが、ここでdfu-utilによってファームウェアがダウンロードされます。そして再試行によってオープンに成功し最後にDevice Connectedと表示されています。
ファームウェアはSRAMに書き込まれますので、USB接続を外して電源が切れてしまうと、再度書き込む必要があります。電源が供給されている間は書き込みが必要無いので、ダブルクリックでLabToolを起動しても大丈夫です。
起動に成功するとこのようなウインドウが表示されます。動作させる場合には、DevicesメニューからLabTool Deviceを選択しておきます。もしLabToolとの接続失敗している場合は、選択できなかったり、左上のLabTool Deviceの表示が赤字になります。
以上でLabToolのビルドは完了です。使い方については、前回のメモを参照してください。
参考までにコマンドラインからビルドするには下記のように行います。qmakeコマンドでMakefileを作成し、makeします。この場合はカレントディレクトリにアプリがビルドされます。他の手順は上記と同様です。
$ cd labtool/app $ mkdir build
$ cd build $ /Applications/Qt/5.2.0/clang_64/bin/qmake .. $ make
成功したらbuildディレクトリ内にLabTool.appが作られているはずです。
ファームウェア書き込みの関係で、特定のディレクトリから起動しなければならないのが面倒です。少し修正が必要になりそうですが、対策を検討してみたいと思います。
また、ファームウェアについては、ビルド済のバイナリを使用しました。ファームウェアのソースコードも提供されているのですが、これのビルドには、開発環境としてKeil uVisionが必要なようです。フリーで利用可能なサイズを超えてしまうので残念ながら構築することができていません。ソースコードを眺めてみると、SCTモジュールを使った周波数カウンタなども含まれているようですので、試してみたいところなのですが。。こちらも何か方法がないか検討してみたいと思います。
LabToolのユーザマニュアル http://www.embeddedartists.com/sites/default/files/support/app/labtool/LabTool_UsersGuide_revPA5.pdf
Embedded ArtistsのLabToolサイト。各プラットフォーム向けバイナリや、ファームウェアのダウンロードはこちらから http://www.embeddedartists.com/products/app/labtool.php
githubにあるソースコード https://github.com/embeddedartists/labtool
Qt Projectのダウンロードページ http://qt-project.org/downloads