昨年の Qt Developer Conference Tokyo 2011 へのご来場、誠にありがとうございました。Qt Developer Conference Tokyo 2011 では 日本テキサス・インスツルメンツ株式会社 様のご提供により、BeagleBoard-xM をプレゼントさせていただきました。その BeagleBoard-xM ですが、Qt 5 (の一部)のビルド済みイメージを同梱してあり、BeagleBoard-xM 上で Qt Quick 2.0 を動かすことが出来るようになっています。
この記事では、BeagleBoard 用 Qt 5 のビルド方法を解説します。なお、ビルドは Ubuntu 10.04 LTS を用いて行いました。
今回作成したイメージのベースには The Ångström Distribution(以下、Ångström) を用いています。Ångström は OpenEmbedded をベースにしたディストリビューションです。BeagleBoard 用の OpenGL ES のパッケージがあることから、今回は Ångström を使用することにしました。
まずは http://www.angstrom-distribution.org/building-angstrom に従って Linux の起動イメージを作成します。今回は console-image を用いますので、systemd-gnome-image の作成は不要です。まずは下記のそれぞれを bitbake で作成してください。
カーネルイメージと console-image が作成できたら、それらを用いて BeagleBoard 上で Linux が起動する環境を作成 してください。
上記のページの手順では OpenGL ES はインストールされませんので、OpenGL ES 用パッケージを別途作成します。必要なパッケージは libgles-omap3 ですので、以下のコマンドで作成できます。
<code>MACHINE=beagleboard ./oebb.sh bitbake libgles-omap3</code>
パッケージが問題なく作成できたら BeagleBoard のイメージにインストールしてください。パッケージは build/tmp-angstrom_2010_x-eglibc/deploy/ipk/
以下に作成されていますので、その中から下記のパッケージ(バージョン番号は異なる可能性があります)を SD カードの適当な位置にコピーします。
また、以下のパッケージも Qt を動かす場合に必要になるので、一緒にコピーしておきましょう。これらのパッケージは console-image を作成する際にビルドされているはずです。
今回の Qt 5 の実行では必要ありませんが、OpenGL ES のデモプログラムである下記のパッケージもついでにコピーしておくと動作確認などに便利です。
各パッケージは BeagleBoard の Linux 上で opkg コマンドを使ってインストールできます。
<code>opkg install *.ipk</code>
インストールした段階では OpenGL ES 用のモジュールが動いていませんので、/etc/inid.d/pvr-init や再起動を行ってください。
なお、私が試したときには /usr/bin/cputype コマンドの不備で /etc/inid.d/pvr-init が正常に動作しなかったため、適当に修正して動かしました。lsmod してドライバ(pvrsrvkm, bufferclass_ti, omaplfb)がインストールされていない場合には パッチ をあててみてください。
libgles-omap3-rawdemos パッケージをインストールしていれば、/usr/bin/SGX/demos/Raw/ にデモプログラムがあるので、これらが正常に動作するか確認すると良いでしょう。
まずは Building Qt 5 from Git を参考に Qt 5 のリポジトリを準備してください。ただし、ソースを全て取ってくるとなると巨大になるため、init-repository には --no-webkit や --no-update オプションを用いて、必要なモジュールのソースだけを取得することをお薦めします。
Qt 5 で Qt Quick 2.0 を動かすために最低限必要なモジュールは下記の通りで、Qt Developer Conference Tokyo 2011 用に作成したバイナリで用いたリビジョンを参考に記載しておきます。
モジュール | リビジョン(Qt Dev. Conf. Tokyo 2011用イメージ) |
---|---|
qtbase | ac188d9582af49fd1bd8de992fddd4740abb5ce3 |
v8(qtbase/src/3rdparty) | d28b6a024826aaa48a8b3e69c096d01c91aff2c9 |
qtxmlpatterns | ede75fb49c9ed59304976b8ba1523874771f7c87 |
qtdeclarative | 831486bb2eed0c1d6bcab9fa75baea3d90bd07b1 |
XmlListModel(qtdeclarative/src/imports/xmllistmodel 以下*) | 99cf198b2b459333099e19ca777a563b96614a85 |
*: 本来、XmlListModel は qtdeclarative モジュールに含まれていますが、タイミングの都合上、別にビルドしました。最新のリポジトリをビルドする際には qtdeclarative のビルド時に一緒にビルドされます。
また、BeagleBoard 用設定ファイルとして http://gitorious.org/qt-platform-mkspecs を参考に使用しています。こちらのリポジトリも入手してください。なお、qt-platform-mkspecs のリビジョンは b8f8409453d551b23380c3584c2ba337f7e8f9ef を使用しました。
各リポジトリの取得が終わったら、mkspecs の準備をします。まずは qt-platform-mkspecs の 5.0/linux-omap3430-g++ を qtbase の mkspecs 以下にコピーしてください。mkspecs とは、Qt をビルドする際のツールチェインなどの設定を記載したものです。
<code>cp -a qt-platform-mkspecs/5.0/linux-omap3430-g++ qtbase/mkspecs/</code>
qt-platform-mkspecs の設定はパスが Ångström の環境とは異なりますので、qtbase/mkspecs/linux-omap3430-g++/qmake.conf を編集してください。編集が必要なのは SYSROOT と GCC_PREFIX の値です。
オリジナルの値は以下になっていますが、
SYSROOT=/stores/ti/beagle/beagle-narc-rootfs
GCC_PREFIX=/opt/toolchains/arm-2010q1/bin/arm-none-linux-gnueabi
Ångström の場合、SYSROOT に build/tmp-angstrom_2010_x-eglibc/sysroots/beagleboard/ 、GCC_PREFIX に build/tmp-angstrom_2010_x-eglibc/sysroots/i686-linux/usr/bin/armv7a-angstrom-linux-gnueabi/arm-angstrom-linux-gnueabi のフルパスを指定しておけば良いでしょう。
まずは qtbase をビルド、インストールします。インストール先は /opt/qt/5 にしていますが、好きなディレクトリに変更しても大丈夫です。今回は画面の表示に X11 や Wayland はもちいずに、フレームバッファを直接 OpenGL ES で駆動する eglfs を用います。eglfs プラグインは通常はビルドされないため、別途ビルドを行います。
cd qtbase
configure -prefix /opt/qt/5 -developer-build -confirm-license -opensource -nomake tests -nomake examples -nomake demos -nomake docs -no-xcb -no-wayland -little-endian -xplatform linux-omap3430-g++ -arch armv7 -opengl es2 -release
make
make install
cd src/plugins/platforms/eglfs/
make
make install
cd ../../../.. cp mkspecs/qmodule.pri /opt/qt/5/mkspecs
最後の qmodule.pri のインストールを忘れないようにしてください。
なお、タッチスクリーン用のプラグインである src/plugins/generic/linuxinput/ 等も必要な場合は make & install してください。
引き続いて、qtxmlpatterns をビルドします。
cd qtxmlpatterns
../qtbase/bin/qmake QMAKE_ABSOLUTE_SOURCE_PATH=$PWD/../qtbase -o Makefile qtxmlpatterns.pro
make
make install
Qt Quick の必須モジュールである qtdeclarative をビルドします。
cd qtdeclarative
../qtbase/bin/qmake QMAKE_ABSOLUTE_SOURCE_PATH=$PWD/../qtbase -o Makefile qtdeclarative.pro
make
make install
ここまでで、/opt/qt/5 以下に Qt 5 のクロス環境が作成できました。実機での実行するには /opt/qt/5 以下のバイナリを実機の同じパスへコピーしてください。ただし、全てをコピーする必要はありません。必要なファイル・ディレクトリを以下に示します。
フォントも必要になりますので、ソースの qtbase/lib/fonts ディレクトリを /opt/qt/5/ilb/ 以下へコピーしてください。
また、Qt Quick 2.0 を試すにはそのプログラムが必要です。qtdeclarative/examples の下を適当なディレクトリにコピーしておきましょう。
Qt Quick 2.0 からは Qt Quick 1.x のときの qmlviewer ではなく、qmlscene を使って QML ファイルを実行します。試しに、examples/declarative/text/fonts/hello.qml を動かしてみましょう。
<code>/opt/qt/5/bin/qmlscene -platform eglfs examples/declarative/text/fonts/hello.qml</code>
以下のような画面が表示されたでしょうか。
オプションで eglfs プラグインを指定していますが、これは QT_QPA_PLATFORM 環境変数に指定しておくことも出来ます。$HOME/.profile などで指定しておいてもいいでしょう。
是非、他の QML ファイルも試してみてください。現状で全てのサンプルが正常に動作するわけではないですが、パーティクルの一部なども動いていますし、Qt Quick 2.0 で高くなった表現力やパフォーマンスを体験することが出来ると思います。
簡単ではありますが、Qt 5 を BeagleBoard で動かす方法を紹介しました。まだまだ Qt 5 自身が開発中と言うこともあり、キーボード入力用のプラグインが eglfs 用には存在しなかったり等問題もありますが、これを機に色々試していただければと思います。
今回は既存のウィンドウシステムを用いない eglfs で動かしましたが、環境を整えれば xcb ベースのプラグインのビルドが出来ることまでは確認してあります。X11 上で Qt 5 を試したり、Wayland での動作を試すのも面白いでしょう。
最後に、英語版の Qt Blog では Raspberry-Pi の記事 がいくつか出ていますが、ハードは違いますが BeagleBoard も Raspberry-Pi もほぼ同様の感覚で扱うことが出来ます。Qt Creator の設定方法など、そちらも参考にしてください。
質問などありましたらこの記事のコメントか、Developer Network の 日本語フォーラム へお願いします。