Raspberry PiでQt5を動かす | Qtとその他諸々の学習ブログ

Qtとその他諸々の学習ブログ

学習メモ。間違えやアドバイス、質問があればコメント下さい。Qtが好きなのでQtの学習が多いです。

Raspberry Pi(以下Pi)でQt5を動かす。

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


以上。