Raspberry Pi + Qt

Raspberry Piとは教育目的で制作された小型(名刺サイズ)の安価なコンピュータです。CPUとメモリが増大したRaspberry Pi 2 が発売され、これを使って実験装置を制御してみようと考え、現在、取組んでいる最中です。いくつかのハードルがありそうですが、その解決策をメモしていきたいと思います。

SDカードにLinux OSをインストールして動かすのですが、昔、PCクラスタなどを作って計算科学を行っていたので、Linuxは何とかなるかと無謀に挑戦しています。実験装置の制御プログラムをグラフィカルGUIに動かしたいと考え、Qt(キュート)を導入することを思いつきました。ネット情報を検索していると、ほとんどが、Raspberry PiのCPUが貧弱であるため、クロスコンパイルをしてインストールする記事ばかりであるので、折角のPi2となりCPUも強化されたのだから、RaspberryPiのOS上で直接コンパイルすることとしました。参考にした記事は、こちらです。(英語ですが・・・)

Native Build of Qt5 on a Raspberry Pi

こちらの記事に従い、Qtをコンパイルしていたら、途中でエラーとなってしまいました。その理由は、8GBのメモリカードにRaspbianというOSを入れ動かしていたのですが、最新版のQtはコンパイルするのに8GB近くのフリーのディスクスペースを必要とし、8GBのSDカードのみだとコンパイル途中で一杯になってしまっていました。そこで、こちらの記事も参考に
Native Build of Qt 5.4.1 on a Raspberry Pi
USBフラッシュメモリーにコンパイル途中のファイルを保存する作戦に変更しました。

 

Raspbian 2015-05-15 (NOOBS1.4.1から8GB class10のSDカードに) インストール

まずは必要なライブラリーのインストール
startx
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install libfontconfig1-dev libdbus-1-dev libfreetype6-dev libudev-dev libicu-dev libsqlite3-dev libxslt1-dev libssl-dev libasound2-dev libavcodec-dev libavformat-dev libswscale-dev libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev gstreamer-tools gstreamer0.10-plugins-good gstreamer0.10-plugins-bad libraspberrypi-dev libpulse-dev libx11-dev libglib2.0-dev libcups2-dev freetds-dev libsqlite0-dev libpq-dev libiodbc2-dev libmysqlclient-dev firebird-dev libpng12-dev libjpeg62-dev libgst-dev libxext-dev libxcb1 libxcb1-dev libx11-xcb1 libx11-xcb-dev libxcb-keysyms1 libxcb-keysyms1-dev libxcb-image0 libxcb-image0-dev libxcb-shm0 libxcb-shm0-dev libxcb-icccm4 libxcb-icccm4-dev libxcb-sync0 libxcb-sync0-dev libxcb-render-util0 libxcb-render-util0-dev libxcb-xfixes0-dev libxrender-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-glx0-dev libxi-dev libdrm-dev

空の8GBのUSBフラッシュメモリ(OSをインストールしたSDカードとは別)をUSBに差し込むと自動で認識され、/media/tmpにマウントされました、(USBフラッシュの名前をtmpにしていたので)
cd /media/tmp
sudo mkdir build
sudo chown pi /media/tmp/build
cd
mkdir ~/opt
sudo mount –bind /media/tmp/build ~/opt
これでoptの中で作成したファイルは、外付けのUSBメモリに保存されるようになります。

cd ~/opt
git clone git://code.qt.io/qt/qt5.git
cd qt5
./init-repository
ちょっと時間がかかります。

nano ~/opt/qt5/qtbase/configure
エディッタでconfigureファイルの中を修正する。
# flags for raspberry pi build
# flags for libdbus-1
QT_CFLAGS_DBUS=”-I/usr/include/dbus-1.0/ -I/usr/lib/arm-linux-gnueabihf/dbus-1.0/include/”
QT_LIBS_DBUS=-ldbus-1
# flags for Glib (X11 only)
QT_CFLAGS_GLIB=”-I/usr/include/glib-2.0/ -I/usr/lib/arm-linux-gnueabihf/glib-2.0/include/”
QT_LIBS_GLIB=-lglib-2.0
ここまでリンクの通りに修正できたが、
QT_CFLAGS_PULSEAUDIOがどのように修正してよいか分からず放置(インストールできていない・・・)。
また、QT_CFLAGS_GSTREAMERも見つからなかったので、無視しました。
最後のQT_CFLAGS_FONTCONFIG=-I/usr/include/freetype2/に関しては、しっかりelse文の中を変更しました。

cd ~/opt/qt5
./configure -v -opengl es2 -device linux-rasp-pi-g”+ -device-option CROSS_COMPILE=/usr/bin/ -opensource -confirm-license -optimized-qmake -reduce-exports -release -qt-pcre -make libs -prefix /usr/local/qt5 &> output
ここでも少し時間がかかります。

ここで、メインイベントのコンパイル
make -j 3 &> output_make
Raspberry Pi 2は4core のCPUだけど、-j のオプションは、3並列までにして安定性を重視しています。

コンパイルには時間がかかるだろうと一晩おいていたのだが、4時間ちょっとで終了していた・・・
(大丈夫か??ちゃんとコンパイルできていない気が・・・)

sudo make install &> output_make_install
これでUSBフラッシュメモリーがラズパイ本体のSDカード/uer/loca/qt5の中にインストールされます。
nano ~/.bashrc
設定ファイルにパスを追加します。
export LD_LIBRARY_PATH=/uer/local/qt5/lib/
export PATH=/usr/local/qt5/bin:$PATH
あとは、確認用のプログラムをコピーしておきました。
cp -r /media/tmp/build/qt5/qtbase/examples/opengl/cube ~/

一旦電源を落とし、USBメモリーを抜き、再起動。 .bashrc の設定も有効化されます。
cd ~/cube
qmake
make
./cube

これでマウスで回転できるサイコロが表示できたので、ひとまずは、成功としましょう。ちなみにインストールできたQtのバージョンは、5.5.0でした。

専門家でもないので、いろいろ問題があると思いますが、詳しい方がこのページをご覧になったときに訂正のご連絡を頂けましたらと思います。コンパイル時間があまりに短かったので、何かまずい点がありそうですが、誰かの参考になれればと考え、暫定版として公開します。