Linuxが動くちっさいCPUボード「Raspberry Pi」向けにビルドします。
販売代理店のサイトはこちら。(日本語)
実機で動かすイメージは公開されててダウンロードページから入手可能です。
2GbyteのSDカードに焼けるサイズになっています。
Raspberry Pi Downloads
今回使用したイメージは「Raspbian “wheezy”」を使用しました。
ビルドにも使用します。
/// 解説ページ ///
Qt5 on RPiのビルドに関する解説ページです。
・Beginner’s guide to cross-compile Qt5 on RaspberryPi
・Simplified guide for getting Qt 5 built and installed on the raspberry pi
この2ヶ所の内容と@task_jpさんと@kimitakeさんのアドバイスでこのページはできてます。
ありがとうございます。
/// 環境(参考) ///
・Ubuntu 12.04 (32bit)
・Virtual Boxにインストール
・割り当てコア数2
・割り当てメモリ2G
かならずOSは32bit版にしてください。
クロスコンパイラが32bitでしか動きません。
/// ビルドの準備 ///
1.gitとg++
必須です。
$sudo apt-get install git g++
2.作業ディレクトリ
$mkdir ~/opt
$cd ~/opt
3.書き込みイメージのDLとマウント
$wget http://files.velocix.com/c1410/images/raspbian/2012-08-16-wheezy-raspbian/2012-08-16-wheezy-raspbian.zip
$unzip 2012-08-16-wheezy-raspbian.zip
$sudo mkdir /mnt/rasp-pi-rootfs
$sudo mount -o loop,offset=62914560 2012-08-16-wheezy-raspbian.img /mnt/rasp-pi-rootfs
4.ツールチェイン
$wget http://blueocean.qmh-project.org/gcc-4.7-linaro-rpi-gnueabihf.tbz
$tar -xf gcc-4.7-linaro-rpi-gnueabihf.tbz
5.クロスコンパイラの設定とか
$git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git
6.Qt5のリポジトリ
$git clone git://gitorious.org/qt/qt5.git
$cd qt5
$./init-repository
7.jsbackgroundのリポジトリ
パッチをあてます。
$cd qtjsbackend/
$git fetch https://codereview.qt-project.org/p/qt/qtjsbackend refs/changes/56/27256/4 && git cherry-pick FETCH_HEAD
8.パスの設定
$cd ~/opt/cross-compile-tools/
$./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc
もしOSが64bitだとここでそんなファイルやフォルダはないと怒られます。
無視するとconfigureでエラーになります。
/// ビルド ///
1.作業ディレクトリへ
$cd ~/opt/qt5
2.エラーがでるモジュールはないことにする
$mv qtwebkit/WebKit.pro qtwebkit/WebKit.pro.bk
$mv qttranslations/qttranslations.pro qttranslations/qttranslations.pro.bk
クリーンするとどうせ消されるけど一応とっておきます。
ぶっちゃけズルですが面倒なのでこの手段でビルド対象から外します。
とりあえずWebkitとローカライズ設定はいらないよね!
3.configure
解説ページはモジュール単位で必要な分だけビルドするような説明になっているけど一気に行きます。
$./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=/home/iori/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs -opensource -confirm-license -optimized-qmake -release -make libs -prefix /opt/qt5 -reduce-relocations -reduce-exports -make tools -no-pch -device-option DEVICE=wheezy
-no-pchを忘れるとmakeでエラーでます。
4.ビルド
$make -j 2
うちの環境での参考時間
real 215m7.613s
user 203m31.899s
sys 6m22.024s
モジュールを個別にビルドしたい時は、それぞれのディレクトリでmakeすればOKです。
/// インストール ///
$sudo make install
/mnt/rasp-pi-rootfs/opt/qt5にコピーされます。
sudoつけるのを忘れずに。
/// RPiの準備 ///
ビルド待ってる間に準備しておきます。
上の手順でDLしたイメージファイルをSDカードへ書き込みます。
僕は、「DDforWindows」を使ってます。Windowsメインの方は参考にどうぞ。
/// RPiへのファイル転送設定 ///
RPiを起動したらアップデートとrsyncをインストールします。
$sudo apt-get update
$sudo apt-get install rsync
$sudo passwd
#パスワード変更はいらないかも
$sudo reboot
IPアドレス確認
$/sbin/ifconfig
ビルドPCでつながるか確認しておきましょう
$ssh pi@
パスワードのデフォルトは「raspberry」です。
/// データの転送 ///
$rsync -av /mnt/rasp-pi-rootfs/opt/qt5/ root@
/// テスト ///
ダウンロードしてくるとかいろいろありますが。後述のHello WorldなサンプルQMLをRPiに保存します。
$export LD_LIBRARY_PATH=/opt/qt5/lib/
$/opt/qt5/bin/qmlscene -I /opt/qt5/imports/ ~/hello.qml
全画面使って中心に「Hello World」と表示されればおめでとうございます。
サンプル(hello.qml)
import QtQuick 2.0
Rectangle {
width: 360
height: 360
Text {
anchors.centerIn: parent
text: "Hello World"
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
}
アプリのクロスビルドについては・・・
解説ページにちゃんと書いてあるけどQt Creatorにqmake設定するとmkspecのリンクが壊れてると怒られたのでまた今度。
sazus
僕の環境だと、qtbase単体のconfigure設定で
-prefix /usr/local/qt5rpi
としてしまったので、PASSの確認はしてみてください。
$ cd /
$ sudo ln -s /usr/local/qt5rpi/mkspecs/ /mkspec
としてmkspecのシンボリックリンクをrootディレクトリに置くと
認識できますよ。あとは、/mnt/rasp-pi-rootfs/にimgも
マウントしないとダメだったりします><