emblog

webのチラ裏、linux、Qt関連はまった&はまってる事etc

RaspberryPi@Raspbian(wheezy)用にQt5beta1をCrossCompileする(その1)

RaspberryPiのRaspbian(wheezy)にて、Qt5beta1をCrossCompileする

Qt5beta1をRaspbian(wheezy)にてCrossCompileした時の覚書です。

既に、@IoriAYANEさんが、既にサクっとcross compileされちゃってます。
(Qt5をRaspberry Pi用にビルドする (理ろぐ))

こちらでは、Qt5のモジュールを個別にmakeした時のログと
けっこうトラブったので、トラブった事項の記載等をしておきます。

  • The Raspberry Pi Foundation

  RasberryPi HP

  • Qt5 CrossCompile参考サイト

  RaspberryPi | Qt Wiki | Qt Developer Network
  RaspberryPi_Beginners_guide | Qt Wiki | Qt Developer Network

***構成***

Host PC : Intel(R) Core(TM) i5-2430M CPU @ 2.40GHz ASUS U24
Host OS : Ubuntu12.04(precise) 64-bit

$ cat /proc/version_signature
    Ubuntu 3.2.0-30.48-generic 3.2.27
$ cat /proc/version
    Linux version 3.2.0-30-generic (buildd@batsu) (gcc version 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #48-Ubuntu SMP Fri Aug 24 16:52:48 UTC 2012

Target board : RasberryPi model B
Target OS : Raspbian (wheezy) Hardflort (2012-08-16-wheezy-raspbian)

***Compile環境設定***

実は、X11のQt5beta1を先にしちゃっていたので、何が必要かわからなかったりするw とりあえず、X11でのQt5 コンパイル時に入れたのは下記サイトを参考にして
参考:http://qt-project.org/wiki/Building_Qt_5_from_Git

$ sudo apt-get install build-essential perl python git
$ sudo apt-get install "^libxcb.*" libx11-xcb-dev libglu1-mesa-dev libxrender-dev

あとは、他ボードのCrossCompileも同じPCで行なっていたりしているので、
個別で必要そうなのは、

  • GNU C Library
$ sudo apt-get install libc6-dev  
  • 32-bit shared libraries
  • Embedded GNU C Library: 32-bit development libraries
$ sudo apt-get install ia32-libs libc6-dev-i386

こちらのTroubleshooting
に記載があったので64bitだと

sudo apt-get install lib32z1-dev

ぐらい?(本当に必要かわかりませんが、@IoriAYANEさんが64bitだとエラーになるとの記載をされていたのですが、僕の方でエラーにならなかったのは、この辺りを入れていたからかもしれません。)

***環境構築Dir構成***

(諸事情でRaspberryPi_Beginners_guide | Qt Wiki | Qt Developer Networkと構築Dir先やDir名は変えています。)

/
|--/opt
|   '--/DeveloperTool
|   |  |--/Qt
|   |  |  '--/qt5-rpi-min/ - Qt5beta1 checkout先
|   |  '-- /RaspberryPi
|   |      '--/Raspbian    - Raspbian (wheezy)のimage置き場
|   '--/toolchain          - RaspberryPi用 Hardfloat CrossCompiler
/mnt
 '--/rpi-rootfs            - RaspberryPi用rootfsマウント先


***CrossCompile環境を整える***

RaspberryPIで使用するimageの展開
The Raspberry Pi Foundationのサイトから、Downloadをクリック。
Downloads | Raspberry Piから
2012-08-16-wheezy-raspbian.zipをダウンロードしていきます。
ダウンロード後に、ダウンロードサイトに記載しているSHA-1と一致しているか確認する。

$ sha1sum 2012-08-16-wheezy-raspbian.zip
63d16fd28369b6e05bf97f2d1758d56df6ed0ba9  2012-08-16-wheezy-raspbian.zip

imageを置くディレクトリに移動し、解凍する。

$ sudo mkdir -p /opt/DeveloperTool/RaspberryPi/Raspbian
$ cd /opt
$ sudo chown <USER>:<GROUP> -R ./DeveloperTool/RaspberryPi/Raspbian
$ cd /opt/DeveloperTool/RaspberryPi/Raspbian
$ mv ~/Downloads/2012-08-16-wheezy-raspbian.zip /opt/DeveloperTool/RaspberryPi/Raspbian
$ unzip ./2012-08-16-wheezy-raspbian.zip

マウント先のディレクトリを作成して、マウントしておく。

$ sudo mkdir /mnt/rpi-rootfs
$ sudo mount -o loop,offset=62914560 2012-08-16-wheezy-raspbian.img /mnt/rpi-rootfs

(memo)
パーティションの開始バイトで62,914,560byteとしているのは、

$ fdisk -l ./2012-08-16-wheezy-raspbian.img

ディスク ./2012-08-16-wheezy-raspbian.img: 1939 MB, 1939865600 バイト
ヘッド 255, セクタ 63, シリンダ 235, 合計 3788800 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスク識別子: 0x000108cb

                     デバイス ブート      始点        終点     ブロック   Id  システム
./2012-08-16-wheezy-raspbian.img1            8192      122879       57344    c  W95 FAT32 (LBA)
./2012-08-16-wheezy-raspbian.img2          122880     3788799     1832960   83  Linux

となっており、FAT32のパーティションには、booterやkernel image。
ex4にはroot file systemが入っています。
今回はroot file systemを参照したい為、2パーティション目の開始からマウントしています。
マウントのbyteは、
セクタサイズが512byteから
512✕122880=62,914,560
といった計算でoffset開始アドレスを算出しています。

CrossCompileを行うToolChainをダウンロードする。

$ cd /opt
$ sudo mkdir ./toolchain
$ sudo chown <USER>:<GROUP> ./toolchain
$ cd ./toolchain
$ wget http://blueocean.qmh-project.org/gcc-4.7-linaro-rpi-gnueabihf.tbz
$ tar -xf gcc-4.7-linaro-rpi-gnueabihf.tbz

(memo)
このToolchainは、Hard float用のものなので、The Raspberry Pi Foundationのサイトのdownloadにある
Soft-float Debian “wheezy”には使用できません。Arch Linux ARMやQtonPiについては、どっちを使っているか不明・・・。
いちおコンパイラについて晒しておきます。

$ /opt/toolchain/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++ -v
組み込み spec を使用しています。
COLLECT_GCC=/opt/toolchain/gcc-4.7-linaro-rpi-gnueabihf/bin/arm-linux-gnueabihf-g++
COLLECT_LTO_WRAPPER=/opt/toolchain/gcc-4.7-linaro-rpi-gnueabihf/bin/../libexec/gcc/arm-linux-gnueabihf/4.7.2/lto-wrapper
ターゲット: arm-linux-gnueabihf
configure 設定: /opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/src/gcc-linaro-4.7-2012.07/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=arm-linux-gnueabihf --prefix=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install --with-sysroot=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fortran --enable-multilib --with-arch=armv6zk --with-tune=arm1176jzf-s --with-fpu=vfp --with-float=hard --with-pkgversion='crosstool-NG linaro-1.13.1-2012.07-20120720 - Linaro GCC 2012.07' --with-bugurl=https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgomp --enable-libssp --with-gmp=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-mpc=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-ppl=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-libelf=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static --with-host-libstdcxx='-L/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/.build/arm-linux-gnueabihf/build/static/lib -lpwl' --enable-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-gold --with-local-prefix=/opt/dev/src/crosstool-ng/crosstool-ng-linaro-1.13.1-2012.07-20120720/builds/arm-linux-gnueabihf-linux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long
スレッドモデル: posix
gcc バージョン 4.7.2 20120701 (prerelease) (crosstool-NG linaro-1.13.1-2012.07-20120720 - Linaro GCC 2012.07) 

cross-compile-toolsのチェックアウト(root file system)

$ cd /opt/DeveloperTool/RaspberryPi/Raspbian 
$ git clone git://gitorious.org/cross-compile-tools/cross-compile-tools.git
$ git log -n 1   /*今回使用したハッシュ値です*/
commit d49f517eaa3bc819f78a01a5eead9e1a697ce6f5
Author: Johannes Zellner <johannes.zellner@nokia.com>
Date:   Mon Aug 20 20:34:36 2012 -0700

    people like me need more specific usage description

とりあえず、次回にて、Qt5のチェックアウトおよびbuildについての
記載をしていきます。
next (その2)