Qt 5をRaspberry Pi向けにビルドする
Raspberry Pi向けにQtをビルドします。以下は元記事。
結構手順があるのですが、慣れるとそれほど手間はかかりません。DLとビルドの時間は別ですが。
Beginner's Guideは失敗時のフォローやQt Creatorの設定もあるので記事は長くなっていますが、ビルドだけ見れば、手順はそれほどでもありません。また、情報量は多く、エラーが出た場合ググるよりも先にBeginner's Guideを確認したほうがよいです。
手順
手順は次のとおり。
- ディレクトリなどの準備
- Raspberry PiのイメージのDLとマウント
- クロスコンパイラとツールの入手
- Qtソースの取得
- ビルドとインストール
- SDカードへ書き込み
ライブラリのビルドと同時に、Raspberry Piのイメージ(をマウントしたところ)にシステムを構築していきます。
ビルド
ディレクトリなどの準備
ツール類などのインストールが必要なので、ディレクトリを準備します。元記事では~/optになっていますがお好みで。
$ mkdir -p ~/local/opt #ツール用 $ mkdir -p ~/raspi/Images #イメージ用 $ mkdir -p ~/raspi/Projects #ビルド用
Raspberry PiのイメージのDLとマウント
本家から落とします。定期的に更新されていますが、最新版をDLすればよいでしょう。DLが完了したら解凍します。
$ cd ~/raspi/Images $ wget http://downloads.raspberrypi.org/images/raspbian/2013-07-26-wheezy-raspbian/2013-07-26-wheezy-raspbian.zip $ unzip 2013-07-26-wheezy-raspbian.zip
で、マウント。マウントするディレクトリはあらかじめ作ります。
$ sudo mkdir /mnt/rasp-pi-rootfs $ sudo mount -o loop,offset=62914560 2013-07-26-wheezy-raspbian.img /mnt/rasp-pi-rootfs
ここで「loop,offset=62914560」ですが、システム側のパーティションをマウントするための細工で、fdiskによって調べることができます。
$ fdisk 2013-07-26-wheezy-raspbian.img Command (m for help): p Disk 2013-07-26-wheezy-raspbian.img: 1939 MB, 1939865600 bytes 255 heads, 63 sectors/track, 235 cylinders, total 3788800 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00047c7a Device Boot Start End Blocks Id System 2013-07-26-wheezy-raspbian.img1 8192 122879 57344 c W95 FAT32 (LBA) 2013-07-26-wheezy-raspbian.img2 122880 3788799 1832960 83 Linux
Sector sizeかUnitsあたりの値とStartの値より、512 * 122880 = 62914560です。変わることはなさそうですが、OSイメージは定期的に更新されるので、念のため。
クロスコンパイラとツールの入手
記事どおりDLします。元のほうはファイルが無いようなので、ミラーから落とします。
$ cd ~/local/opt $ wget http://swap.tsmt.eu/gcc-4.7-linaro-rpi-gnueabihf.tbz $ tar xf gcc-4.7-linaro-rpi-gnueabihf.tbz
名前からしてlinaro版のクロスコンパイラだと思われるので、このあたりから入れたものでも大丈夫なんじゃなかろうかとは思いますが。
また、これとは別にツール類をDLします。
$ git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git
httpの場合は「http://git.gitorious.org/cross-compile-tools/cross-compile-tools.git」です。
Qtソースの取得
gitでQtのソースを取得して、スクリプトで初期化します。
$ cd ~/raspi/Projects $ git clone git://gitorious.org/qt/qt5.git #httpはhttp://git.gitorious.org/qt/qt5.git $ cd qt5 $ ./init-repository
こちらもhttpの場合、微妙にURLが異なるので注意。
元記事ではこの後パッチを当てますが、今のリポジトリではコンフリクトを起こします。同じような修正が適用されているような...けど完全には一致して無いし...といった感じなんですが、当てなくても動作するので無視しときます。
ビルドとインストール
まず、スクリプトを実行して、環境を整えます。
$ cd ~/local/opt/cross-compile-tools $ sudo ./fixQualifiedLibraryPaths /mnt/rasp-pi-rootfs/ ~/local/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-gcc
そして、qtbaseをビルドします。まずディレクトリに入って、git branchでソースの状態を確認。stableやmasterで無い場合は、checkoutしておきます。
$ cd ~/raspi/Projects/qt5/qtbase * (no branch) stable $ git checkout stable
で、configure。長いですが、コンパイラのパスに注意して実行し、make。
$ ./configure -opengl es2 -device linux-rasp-pi-g++ -device-option CROSS_COMPILE=~/local/opt/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /mnt/rasp-pi-rootfs -opensource -confirm-license -optimized-qmake -reduce-relocations -reduce-exports -release -make libs -prefix /usr/local/qt5pi $ make -j2 $ sudo make install
これで以降に必要なqmakeなどがローカルにビルド、インストールされ、Raspberry Piのイメージをマウントしたところに、ビルドしたライブラリがインストールされます。
qtbaseの後は、個別にライブラリをビルドしていきます。記事を参考に順番にビルドしていきます。なんかソースが無いやつがあったりしますが。
- qtimageformats
- qtsvg
- qtjsbackend
- qtscript
- qtxmlpatterns
- qtdeclarative
- qtsensors
- qt3d (ソースなし)
- qtgraphicaleffects
- qtjsondb (ソースなし)
- qtlocation (ソースなし)
- qtdocgallery (ソースなし)
- qtquickcontrols (Qt QuickのControlsとLayouts)
Qt 5.1から入ったQt QuickのControlsなどはqtquickcontrolsのビルドが必要なため追加でビルドします。
ビルドの手順はqmakeからのmakeですが、qtbase同様にgit branchでソースの状態を確認してからビルドを行います。
$ cd qtimageformats $ git checkout stable # stableで無い場合 $ /usr/local/qt5pi/bin/qmake . $ make -j2 $ sudo make install
SDカードへ書き込み
ビルドが完了したらイメージをSDカードに書き込みます。
$ sudo umount /dev/sdX* # sdXはdfかdmesgで調べて、適宜書き換え $ cd ~/raspi/Images $ sync;sudo umount /mnt/rasp-pi-rootfs $ sudo dd bs=1M if=2013-07-26-wheezy-raspbian.img of=/dev/sdX; sync # sdXは適宜書き換え
完了後、
SDカードの準備はこれで完了したので、後は通常通り起動します。初期の2GBだと開発時の容量が足りなくなっていくので容量は拡張したほうがよいです。
いったんRaspberry Piで起動してパーティションの容量を拡張し、PC側でddを使ってイメージを保存。そのイメージをrasp-pi-rootfsにマウントして使うようにするとよいです。