2013/1/20追記
==========
こちらの方法だともっと簡単にできそうです。
名古屋Qt勉強会 #6のsazusさんの発表。
3. Raspberry PiでQt5をはじめよう by sazusさん
Raspberry PiというLinuxで動作するboardでのQt5beta1環境構築についてお話します。当日までに、倒せたらエミュレータでの動作についても話せたらいいな。
資料 http://t.co/OW4q0ffy
Ustream http://www.ustream.tv/recorded/26459152
==========
■全体の流れ
・Pi用のQtをビルドする
・Pi用のOS(filesystem)にビルドしたQtをインストールする
・Pi用のOS(filesystem)をSDカードに書いてPiを起動する
■Pi用のQtをビルドする
◆参考URL
http://relog.xii.jp/archives/2012/09/qt5raspberry_pi.html
http://qt-project.org/wiki/RaspberryPi_Beginners_guide
◆作業環境(参考)
VirtualBox 4.2.6 r82870を使用
Guest OS:Ubuntu12.04(32bit)
割り当てメモリ:1GB
割り当てコア数:8
Host OS:Windows7(64bit)
VirtualBoxのGuestOSであるUbuntu12.04(32bit)に
ビルド環境を構築することになりますが、
それは32bit版必須とのことです。
クロスコンパイラが32bitしか対応していないらしいです。
◆ビルドの準備
http://relog.xii.jp/archives/2012/09/qt5raspberry_pi.html
の「/// ビルドの準備 ///」とほぼ同じです。
・ gitとg++のインストール
$sudo apt-get install git g++
※私の環境では既にインストールしてあった
・作業ディレクトリを作成して移動
$mkdir ~/opt
$cd ~/opt
・書き込みイメージ(filesystem)のDLとマウント
http://www.raspberrypi.org/downloads
にあるRaspbian "wheezy"をDLした。
私がDLした時は
2012-12-16-wheezy-raspbian.zip
だった。
zipを解凍してマウントする。
$unzip 2012-12-16-wheezy-raspbian.zip
$sudo mkdir /mnt/rasp-pi-rootfs
$sudo mount -o loop,offset=62914560 2012-12-16-wheezy-raspbian.img /mnt/rasp-pi-rootfs
※offsetの値についてなぜその値なのか気になったので調べたが、
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1154340456
が参考になった。以下、やる必要は無いですが参考まで。
==========
$/sbin/fdisk -u 2012-12-16-wheezy-raspbian.img
「p パーティションテーブルを表示する」を実行
コマンド (m でヘルプ): p
で下記が表示された。
~~~~~~~~~~~~
ディスク 2012-12-16-wheezy-raspbian.img: 1939 MB, 1939865600 バイト
ヘッド 255, セクタ 63, シリンダ 235, 合計 3788800 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x00017b69
デバイス ブート 始点 終点 ブロック Id システム
2012-12-16-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA)
2012-12-16-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
~~~~~~~~~~~~
セクタサイズ(論理/物理のどちらを使うのか不明)とマウントしたいパーティションの始点から算出するらしい。
512*122880=62914560
==========
・ツールチェインの取得
$wget http://blueocean.qmh-project.org/gcc-4.7-linaro-rpi-gnueabihf.tbz
$tar -xf gcc-4.7-linaro-rpi-gnueabihf.tbz
・クロスコンパイラの設定用ツールの取得
$git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git
・Qt5のソースを取得
$git clone git://gitorious.org/qt/qt5.git
$cd qt5
$./init-repository
・qtjsbackendのパッチを当てる。
$cd qtjsbackend/
$git fetch https://codereview.qt-project.org/p/qt/qtjsbackend refs/changes/56/27256/4 && git cherry-pick FETCH_HEAD
・パスの設定
$cd ~/opt/cross-compile-tools/
$./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc
◆ビルド
http://relog.xii.jp/archives/2012/09/qt5raspberry_pi.html
の「/// ビルド ///」とほぼ同じです。
・作業ディレクトリへ移動
$cd ~/opt/qt5
・エラーが出るモジュールを外す
エラーが出るらしいです。(WebKitは動かしてみたいので後で調べようかな)
$mv qtwebkit/WebKit.pro qtwebkit/WebKit.pro.bk
$mv qttranslations/qttranslations.pro qttranslations/qttranslations.pro.bk
クリーンするとどうせ消されるけど一応とっておく。削除しても問題は無いだろう。
・configure
http://qt-project.org/wiki/RaspberryPi_Beginners_guide
ではモジュール単位で必要な分だけビルドするような説明になっているけど
http://relog.xii.jp/archives/2012/09/qt5raspberry_pi.html
を真似して一気にビルド
$./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
・ビルド実行
$make -j 8
下記エラーが出た。
=======
virtual memory exhausted: メモリを確保できません
virtual memory exhausted: メモリを確保できません
make[3]: *** [.obj/release-shared/qstylesheetstyle.o] エラー 1
make[3]: *** 未完了のジョブを待っています....
make[3]: *** [.obj/release-shared/qdatetimeedit.o] エラー 1
make[3]: ディレクトリ `/home/noboru/opt/qt5/qtbase/src/widgets' から出ます
make[2]: *** [sub-widgets-make_first] エラー 2
make[2]: ディレクトリ `/home/noboru/opt/qt5/qtbase/src' から出ます
make[1]: *** [sub-src-make_first] エラー 2
make[1]: ディレクトリ `/home/noboru/opt/qt5/qtbase' から出ます
make: *** [module-qtbase-make_first] エラー 2
=======
Firefoxを閉じて
$make -j 4
やったらエラーなく完了した。
■Pi用のOS(filesystem)に、上記手順でビルドしたQtをインストールする
◆マウントした2012-12-16-wheezy-raspbian.img にビルドしたQtをインストール
$make install
/mnt/rasp-pi-rootfs/opt/
にqt5フォルダができているので必要なファイルがインストールされたっぽい。
◆動作確認用のqmlファイルを作成しておく
下記hello.qmlを作成して以下のパスへ保存(rasp-pi-rootfs以下はどこでも良い)
/mnt/rasp-pi-rootfs/home/pi/Program_Qt/HelloWorld01/
=======
(サンプル helloWorld01.qml)
import QtQuick2.0
Rectangle {
width: 360
height: 360
Text {
anchors.centerIn: parent
text: "Hello World"
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
}
========
■Pi用のOS(filesystem)をSDカードに書いてPiを起動する
◆アンマウント
$cd ~/opt/
$sync; sudo umount /mnt/rasp-pi-rootfs
修正を反映してun mountするという動作になるっぽい。
◆2012-12-16-wheezy-raspbian.imgをSDカードに書き込む
SDのスロットがVirtualBoxで認識できないので、
Image Writer for WindowsにてWindows上から.imgをSDに焼いた。
蛇足だが、上記ツールはQtで作っているみたい。
◆SDカードをPiに挿して起動
◆qmlscene(qmlviewerのqt5版)でqmlを表示
$ /opt/qt5/bin/qmlscene ~/Program_Qt/HelloWorld01/helloWorld01.qml
※http://relog.xii.jp/archives/2012/09/qt5raspberry_pi.html には下記のように
記載してあったが、私の環境では不要だった。
======
$export LD_LIBRARY_PATH=/opt/qt5/lib/
$/opt/qt5/bin/qmlscene -I /opt/qt5/imports/ ~/hello.qml
======
参考URL;
http://relog.xii.jp/archives/2012/09/qt5raspberry_pi.html
http://qt-project.org/wiki/RaspberryPi_Beginners_guide
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1154340456
以上。