YoctoでのQt5.5ビルドログ

いきあたりばったりの個人的ログです

全体的には
http://embedded-software-architecture.com/?page_id=134
ここを参考に

```bash
$ curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/usrfs/bin/repo
$ chmod a+x ~/usrfs/bin/repo
$ mkdir fsl-community-bsp
$ cd fsl-community-bsp
$ repo init -u https://github.com/Freescale/fsl-community-bsp-platform -b master-next
$ repo sync
$ cd sources
$ git clone -b master-next https://github.com/meta-qt5/meta-qt5.git
$ cd ..
$ MACHINE=imx6dlsabresd source ./setup-environment build
$ cd conf
$ cp local.conf local.conf.orig
```

```bash
$ cd sources/meta-qt5
$ git checkout jethro
$ cd ../../
```

ビルド開始してみると

```bash
$ cd build
$ bitbake fsl-image-multimedia
NOTE: Your conf/bblayers.conf has been automatically updated.
NOTE: Your conf/bblayers.conf has been automatically updated.
ERROR:  OE-core's config sanity checker detected a potential misconfiguration.
    Either fix the cause of this error or at your own risk disable the checker (see sanity.conf).
    Following is the list of potential problems / advisories:

    You system needs to support the en_US.UTF-8 locale.

Summary: There was 1 ERROR message shown, returning a non-zero exit code.
```

どうやらロケールがないらしい、`/etc/local.gen`の`en_US.UTF-8`のコメントアウトを外し

```:/etc/local.gen
en_US.UTF-8 UTF-8
```

以下のコマンドでロケール生成

```bash
$ sudo locale-gen
```

改めて`bitbake`実行

```bash
$ bitbake fsl-image-multimedia
```

qtのビルドでコケる

```
ERROR: qtbase-5.5.1+gitAUTOINC+5afc431323-r0 do_populate_sysroot: QA Issue: libQt5Widgets.la failed sanity test (workdir) in path /home/maueki/work/yocto/fsl-community-bsp/build/tmp/work/cortexa9hf-neon-mx6qdl-poky-linux-gnueabi/qtbase/5.5.1+gitAUTOINC+5afc431323-r0/sysroot-destdir/usr/lib [la]
```

上記のようなエラーが31個ほど、いずれもQt関係

jethroではなくjethro-nextを使ってみる

```
$ cd ../sources/meta-qt5
$ git checkuot jethro-next
$ ../../build
$ bitbake fsl-image-multimedia
```

→　変わらずエラー発生

ぐぐると[このパッチ](http://git.openembedded.org/openembedded-core/commit/meta/classes/insane.bbclass?id=3739aaf644d5a0f28e85fd07c67cecbfa5b8fb8a)を適用、とかいてあるもののすでに適用済み。
jethro使ってるのがまずいのかと考え上記パッチを手パッチで逆適用。

Qtはビルドできたが、次はboostがchecksum mismatchでビルド失敗

あまり良くはなさそうだが
fsl-community-bsp/sources/poky/meta/recipes-support/boost/boost-1.62.0.inc にあるチェックサムをエラーメッセージにあるチェックサムで無理やり上書きして続行

さらに次のエラー

```
ERROR: qtbase-5.5.1+gitAUTOINC+5afc431323-r0 do_package_qa: QA Issue: -dev package contains non-symlink .so: qtbase-examples-dev path '/work/cortexa9hf-neon-mx6qdl-poky-linux-gnueabi/qtbase/5.5.1+gitAUTOINC+5afc431323-r0/packages-split/qtbase-examples-dev/usr/share/qt5/examples/widgets/tools/echoplugin/plugin/libechoplugin.so'
-dev package contains non-symlink .so: qtbase-examples-dev path '/work/cortexa9hf-neon-mx6qdl-poky-linux-gnueabi/qtbase/5.5.1+gitAUTOINC+5afc431323-r0/packages-split/qtbase-examples-dev/usr/share/qt5/examples/widgets/tools/styleplugin/styles/libsimplestyleplugin.so'
-dev package contains non-symlink .so: qtbase-examples-dev path '/work/cortexa9hf-neon-mx6qdl-poky-linux-gnueabi/qtbase/5.5.1+gitAUTOINC+5afc431323-r0/packages-split/qtbase-examples-dev/usr/share/qt5/examples/widgets/tools/plugandpaint/plugins/libpnp_extrafilters.so' [dev-elf]
```

やむなくqtbase-examplesをlocal.confから外す

今度はqtdeclarative-example-devで同じエラー

```
ERROR: qtdeclarative-5.5.1+gitAUTOINC+3e9f61f305-r0 do_package_qa: QA Issue: -dev package contains non-symlink .so: qtdeclarative-examples-dev path '/work/cortexa9hf-neon-poky-linux-gnueabi/qtdeclarative/5.5.1+gitAUTOINC+3e9f61f305-r0/packages-split/qtdeclarative-examples-dev/usr/share/qt5/examples/quick/customitems/painteditem/TextBalloonPlugin/libqmltextballoonplugin.so'
-dev package contains non-symlink .so: qtdeclarative-examples-dev path '/work/cortexa9hf-neon-poky-linux-gnueabi/qtdeclarative/5.5.1+gitAUTOINC+3e9f61f305-r0/packages-split/qtdeclarative-examples-dev/usr/share/qt5/examples/quick/imageprovider/ImageProviderCore/libqmlimageproviderplugin.so'
-dev package contains non-symlink .so: qtdeclarative-examples-dev path '/work/cortexa9hf-neon-poky-linux-gnueabi/qtdeclarative/5.5.1+gitAUTOINC+3e9f61f305-r0/packages-split/qtdeclarative-examples-dev/usr/share/qt5/examples/qml/qmlextensionplugins/imports/TimeExample/libqmlqtimeexampleplugin.so' [dev-elf]
```

以下の変更を加えた

```:sources/meta-qt5/recipes-qt/qt5/qtdeclarative_git.bb
PACKAGES_remove = "${PN}-examples-dev ${PN}-examples-staticdev ${PN}-examples-dbg"
```

qtdeclarativeはこれでうまく言ったのでqtbase-examplesの方も同様の修正にした。
→ 結局qtbase-examplesはエラー

qtbase_git.bbのQT_CONFIG_FLAGSに`-nomake examples`追加

ビルド完了

## 起動

build/tmp/deploy/images/imx6dlsabresd にビルドイメージができている

SDカードへ焼く

```
$ zcat ./fsl-image-multimedia-imx6dlsabresd.sdcard.gz | sudo dd of=/dev/sdb
```

of指定は環境に合わせて。**間違うとデスクトップのシステムが死んだりする**ので細心の注意を払う。

### LVDSへの表示

起動するとLVDSにロゴはでるが、その後の出力がない。USB UARTで接続するとログインプロンプトは出るので起動は問題なさそう。

再起動してubootの変数を見ると

```
=> printenv
(省略)
video_interfaces=hdmi lvds lcd
```

となっていたので

```
=> setenv video_interfaces lvds hdmi lcd
=> saveenv
=> boot
```

これでペンギンとともに起動時の出力がLVDSに出るようになった。

### スクリーンセーバーの無効化

```bash
$ echo 0 > /sys/class/graphics/fb0/blank
```

## ツールチェインの作成

```bash
$ bitbake meta-toolchain-qt5
```

またしてもエラー

```
ERROR: qtsystems-5.5.1+gitAUTOINC+0577ffca58-r0 do_configure: Error calling /home/maueki/work/yocto/fsl-community-bsp/build/tmp/sysroots/x86_64-linux/usr/bin/qt5/qmake -makefile -o Makefile     --disable-static  /home/maueki/work/yocto/fsl-community-bsp/build/tmp/work/cortexa9hf-neon-poky-linux-gnueabi/qtsystems/5.5.1+gitAUTOINC+0577ffca58-r0/git/qtsystems.pro
ERROR: qtsystems-5.5.1+gitAUTOINC+0577ffca58-r0 do_configure: Function failed: do_configure (log file is located at /home/maueki/work/yocto/fsl-community-bsp/build/tmp/work/cortexa9hf-neon-poky-linux-gnueabi/qtsystems/5.5.1+gitAUTOINC+0577ffca58-r0/temp/log.do_configure.1595)
ERROR: Logfile of failure stored in: /home/maueki/work/yocto/fsl-community-bsp/build/tmp/work/cortexa9hf-neon-poky-linux-gnueabi/qtsystems/5.5.1+gitAUTOINC+0577ffca58-r0/temp/log.do_configure.1595
```

`--disable-statis`オプションを除けば良さそうだがいまいちどこで指定されているかわからなかった。

エラーしているのが、qtsystemsとqtconnectivityだったので、sources/meta-qt5/recipes-qt/packagegroups/packagegroup-qt5-toolchain-target.bb の RDEPENDS_${PN}から関係パッケージを除いてみる。

ビルド完了

### インストール

```bash
$ cd build/tmp/deploy/sdk
$ sh ./poky-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-neon-toolchain-2.2.sh
(中略)
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
 $ . /opt/poky/2.2/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
```

最後の行はインストーラからのメッセージで、このコマンドを実行すると環境がセットアップされる。

### クロスビルドしてみる

githubから持ってきたqt5.5/qtbaseのexample/widget/graphicsview/collidingmiceで実行

```bash
$ source /opt/poky/2.2/environment-setup-cortexa9hf-neon-poky-linux-gnueabi
$ source /opt/poky/2.2/sysroots/x86_64-pokysdk-linux/environment-setup.d/qt5.sh
$ qmake
 Project ERROR: Could not find feature force_asserts.
```

エラーが…

qt5.4で試してみる。

```bash
$ qmake
$ make
linking collidingmice
/home/maueki/work/qt5.4/qtbase/lib/libQt5Widgets.so: file not recognized: ファイル形式が認識できません
collect2: error: ld returned 1 exit status
Makefile:199: ターゲット 'collidingmice' のレシピで失敗しました
make: *** [collidingmice] エラー 1
```

なぜかツールチェインではなくqtbase内のライブラリ（これはデスクトップ用にビルドされていた）を見に行ってしまう。
このディレクトリを/opt/workにコピーしてみると。なぜかビルドが通った。

```bash
$ cp -r collidingmice /opt/work
$ cd /opt/work/colligingmice
$ qmake
$ make
```

## gdbの追加

ボード上にgdbが無いので追加してみる。

build直下で実行

```bash
$ bitbake gdb
```

`tmp/deploy/rpm/cortexa9hf_neon`以下にrpmパッケージができている。
と、 **ここまできてボード上にそもそもパッケージマネージャが入ってないことが判明。**

build/conf/local.confの`EXTRA_IMAGE_FEATURES`に`package-management`を追加、ついでに`IMAGE_INSTALL_append`に`gdb`も追加して再ビルド。

SDカードに焼き直して無事完了