Edited at

Raspberry Pi 3 で Qt 5 をビルドして動かす方法(Yocto layer Boot2Qt編)


はじめに

The Qt Companyが提供しているYoctoレシピを使用して

Raspberry Pi3

で動作するQt5.12.3のLinux imageと開発環境の構築をおこないます。

詳細は、以下のディレクトリ!

https://doc.qt.io/QtForDeviceCreation/qtee-custom-embedded-linux-image.html



Yoctoとは

Linuxをビルドするパッケージ管理プロジェクトです。


  • Linux OS

  • 使用するLinux library/module関連

をbitbakeというビルドツールを利用して、buildをおこないます。

またレシピという概念を利用して、簡単?に必要なlibrary/moduleの追加を行えます。



Yoctoのバージョン

Yoctoには、様々なバージョンがあります。

使用するレシピでどのようなバージョンを使用するか事前に調べておく事が良いです。

https://wiki.yoctoproject.org/wiki/Releases



YoctoレイヤーBoot2Qtをbuildする



Pokyの導入

Poky は Yocto Project のリファレンス・ビルド・システムです。

Poky には、BitBake、OpenEmbedded-Core、BSP (Board Support Package) といった基本的なもの含まれています。

gitリポジトリから取得する



$ cd /opt/yocto

$ git clone git://git.yoctoproject.org/poky

$ cd /opt/yocto/poky



Yoctoのバージョンをsumoにする

Yoctoのリリースページ(https://wiki.yoctoproject.org/wiki/Releases)

Boot2-Qtのページ(https://code.qt.io/cgit/yocto/meta-boot2qt.git/)

のCommit履歴を見るとQt5.12.3はsumoブランチにあり。

今回は、sumo current version 2.5.3をbanch取得する

$ git checkout -b Branch_yocto-2.5.3 yocto-2.5.3

Switched to a new branch 'Branch_yocto-2.5.3'

あらかじめBuildに使用する環境変数をセットします。



$ source oe-init-build-env



Boot2-Qtのレシピの取得

poky ディレクトリ内でmeta-boot2qtのsumo branchを取得する

https://code.qt.io/cgit/yocto/meta-boot2qt.git/

から取得

$ git clone -b sumo git://code.qt.io/yocto/meta-boot2qt.git

$ cd ./meta-boot2qt
$ git checkout -b Tag_v5.12.3 v5.12.3



Boot2-Qtのを取得

git clone した meta-boot2qt以下のb2qt-init-build-envのHelpが参考になります。

$ ./b2qt-init-build-env help

Usage: b2qt-init-build-env COMMAND [ARGS]

Initialize build environment:
b2qt-init-build-env init --device <name> [--reference <mirror path>] [--manifest-dir <dir path>] [--internal]
--device <name>: target device name or 'all'
--reference <mirror path>: path to local mirror, initialized previously with 'b2qt-init-build-env mirror'
--manifest-dir <dir path>: path to a directory containing repo manifest file(s)
--internal: fetch internal repositories, available only inside The Qt Company network.
Initialize local mirror:
b2qt-init-build-env mirror
List available devices:
b2qt-init-build-env list-devices

たとえば、



./b2qt-init-build-env list-devices



を使用することによりBuildできるデバイス一覧が確認できます。



Boot2-QtにてRaspberry Pi3を設定する

$ b2qt-init-build-env init --device raspberrypi3

をおこなう事によりBuildに必要なレシピ群を取得し、Raspberry Pi3用の設定がされます。

poky/build のディレクトリに自動で移動しますので、そのまま



$ export MACHINE=raspberrypi3

$ source ./setup-environment.sh



を実行する。



Boot2-Qtを利用したYoctoのbuild

$ bitbake b2qt-embedded-qt5-image

$ bitbake meta-toolchain-b2qt-embedded-qt5-sdk

boot2Qtのimageは、以下の所にある。


The target rootfs image is located in the /tmp/deploy/images/${MACHINE}/b2qt-automation-qt5-image-${MACHINE}.img


/opt/yocto/poky/build/build-raspberrypi3/tmp/deploy/images/raspberrypi3

b2qt-embedded-qt5-image-raspberrypi3.img

b2qt-embedded-qt5-image-raspberrypi3.imgはシンボリックリンクとなっており実体は

b2qt-embedded-qt5-image-raspberrypi3.img -> b2qt-embedded-qt5-image-raspberrypi3-20190606081703.rootfs.rpi-sdimg

容量をみてみると、1.6GB程度なので、4GBぐらいのmicroSDCardを用意するば良さそうです。

-rw-r--r-- 2 sazus sazus 1.6G 6月 6 17:24 b2qt-embedded-qt5-image-raspberrypi3-20190606081703.rootfs.rpi-sdimg

lrwxrwxrwx 2 sazus sazus 68 6月 6 17:24 b2qt-embedded-qt5-image-raspberrypi3.img -> b2qt-embedded-qt5-image-raspberrypi3-20190606081703.rootfs.rpi-sdimg

lrwxrwxrwx 2 sazus sazus 68 6月 6 17:24 b2qt-embedded-qt5-image-raspberrypi3.rpi-sdimg -> b2qt-embedded-qt5-image-raspberrypi3-20190606081703.rootfs.rpi-sdimg



microSDCardへの書き込み

$ cd /opt/yocto/poky/build/build-raspberrypi3/tmp/deploy/images/raspberrypi3

$ sudo dd if=./b2qt-embedded-qt5-image-raspberrypi3.img of=/dev/mmcblk0
3186688+0 レコード入力
3186688+0 レコード出力
1631584256 bytes (1.6 GB, 1.5 GiB) copied, 655.174 s, 2.5 MB/s



SDKのInstall

$ ./b2qt-x86_64-meta-toolchain-b2qt-embedded-qt5-sdk-raspberrypi3.sh 



Boot2Qtの実行

Raspberry Piに焼いたmicroSDCardをさして実行します!