This service is available only in Japanese-language.

Yocto SDKについて

Yoctoイメージをビルドした環境で、下記のようにSDKの構築を行いました。

$ bitbake fsl-image-qt5-validation-imx -c populate_sdk

$ ls tmp/deploy/sdk
fsl-imx-xwayland-glibc-x86_64-fsl-image-qt5-validation-imx-aarch64-toolchain-5.4-zeus.host.manifest
fsl-imx-xwayland-glibc-x86_64-fsl-image-qt5-validation-imx-aarch64-toolchain-5.4-zeus.sh
fsl-imx-xwayland-glibc-x86_64-fsl-image-qt5-validation-imx-aarch64-toolchain-5.4-zeus.target.manifest
fsl-imx-xwayland-glibc-x86_64-fsl-image-qt5-validation-imx-aarch64-toolchain-5.4-zeus.testdata.json

質問1
 QtCreatorを使った開発環境構築したいのですが、上記のSDKをインストールするだけで
 Qt5用のクロスコンパイルツールキットは構築可能でしょうか?

 Debian10.1上にi.MX7用のクロスコンパイル環境を用意したときは下記の手順を踏みました。
  1.i.MX7用のクロスコンパイルパッケージインストール
  2.Qt5コンパイルに必要なパッケージインストール
  3.i.MX7上で動作しているルートファイルシステムイメージを取得して、開発環境側で展開
  4.gitでQt5ソースコード取得
     git clone https://github.com/qt/qt5.git
     cd qt5 
     git checkout 5.13
     git submodule update --init
  5.Qt5ビルドとインストール
  6.QtCreatorインストールとツールキット設定

 上記SDKで、Qt5ライブラリまでビルドされているのであれば、QtCreatorをインストールして、ツールキットを
 設定するだけで構築できると思います。

質問2
 Yocto SDKのみをインストールした、クロスコンパイル開発環境OSイメージを作成したいのですが、
 tmp/deploy/sdk以下をコピーして、「fsl-imx-xwayland-glibc-x86_64-fsl-image-qt5-validation-imx-aarch64-toolchain-5.4-zeus.sh」を
 実行するだけでSDKを構築可能でしょうか?
 Yoctoソースコード一式必要でしょうか?

質問1に関して
イメージに対してpopulate_sdkを実施した場合、イメージ上で動作可能なアプリケーションをCross構築するのに必要な
ヘッダーファイル・ライブラリを含んだ形のSDKを生成します。
よって、Qt5用のクロスコンパイルツールキットは構築可能となります。

質問2に関して
まっさらなLinuxDistribution上でSDKのインストールスクリプト「fsl-imx-xwayland-glibc-x86_64-fsl-image-qt5-validation-imx-aarch64-toolchain-5.4-zeus.sh」を実行することで、スクリプト内に含まれるバイナリが展開されSDKの使用が可能となります。
よって、アプリケーションのクロス構築のみ行う場合はYoctoの構築環境は不要です。

回答ありがとうございます。

下記の手順で、Qtクロスコンパイル開発環境を構築することができました。
①まっさらなLinuxDistribution上でSDKのインストールスクリプト「fsl-imx-xwayland-glibc-x86_64-fsl-image-qt5-validation-imx-aarch64-toolchain-5.4-zeus.sh」を実行
②Qt5インストーラを実行
③QtCreatorを起動してツールキットを設定

単純なウインドウとボタンを配置したアプリケーションをコンパイルして、
NXP製 i.MX8Mmini EVK上で実行したところ、下記のワーニングメッセージは表示されましたが、
アプリケーション自体は起動しました。
qt.qpa.xcb: xcb_shm_create_segment() failed for size 192000

------------------------

また、弊社ではQtアプリケーション上で動画(MP4フォーマット)を再生しようとしています。
Debian10.1(インテルCPU)上では動作しましたが、i.MX8Mmini EVK上で動作させると、
下記のメッセージが表示され起動できませんでした。
error while loading shared libraties: libQt5MultimediaWidgets.so.5: cannot open shared object file: No such file or directory

Qt5のマルチメディア系のライブラリが無いようです。

Yoctoのイメージは下記コマンドでビルドしました。
Multiedia関連のパッケージを組み込むために、なんらかの設定変更は必要でしょうか?

$ mkdir imx-yocto-bsp
$ cd imx-yocto-bsp
$ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-zeus -m imx-5.4.3-1.0.0.xml
$ repo sync

$ DISTRO=fsl-imx-xwayland MACHINE=imx8mmevk source imx-setup-release.sh -b Build-xwayland-imx8mmevk

一度ビルドしているので、下記のメッセージが表示されます。
「meta-multimedia」の項目になにも表示されていないため組み込まれていないのでしょうか?

$ bitbake imx-image-full
WARNING: Host distribution "debian-10" has not been validated with this version of the build system; you may possibly experience unexpected failures. It is recommended that you use a tested distribution.
Loading cache: 100% |############################################| Time: 0:00:00
Loaded 4067 entries from dependency cache.
NOTE: Resolving any missing task queue dependencies

Build Configuration:
BB_VERSION = "1.44.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "debian-10"
TARGET_SYS = "aarch64-poky-linux"
MACHINE = "imx8mmevk"
DISTRO = "fsl-imx-xwayland"
DISTRO_VERSION = "5.4-zeus"
TUNE_FEATURES = "aarch64 cortexa53 crc crypto"
TARGET_FPU = ""
meta
meta-poky = "HEAD:0275e68b0576cdefc19718e4b1977044f9f43f48"
meta-oe
meta-multimedia
meta-python = "HEAD:aad5b3d070cd8c58828b0975cf861d8ebc90f460"
meta-freescale = "HEAD:0be39721cea6e04c589a419f4bb07fabd0da6704"
meta-freescale-3rdparty = "HEAD:aea3771baa77e74762358ceb673d407e36637e5f"
meta-freescale-distro = "HEAD:ca27d12e4964d1336e662bcc60184bbff526c857"
meta-bsp
meta-sdk
meta-ml = "HEAD:435f5e984856a943986491fddd061734a0b9eba5"
meta-browser = "HEAD:5f365ef0f842ba4651efe88787cf9c63bc8b6cb3"
meta-rust = "HEAD:5cda04c7c2158fc982502ca1e7893f71e4ca1729"
meta-gnome
meta-networking
meta-filesystems = "HEAD:aad5b3d070cd8c58828b0975cf861d8ebc90f460"
meta-qt5 = "HEAD:432ad2aa6c3a13253fefc909faba368851d21fb1"

Initialising tasks: 100% |#######################################| Time: 0:00:06
Sstate summary: Wanted 0 Found 0 Missed 0 Current 3214 (0% match, 100% complete)
NOTE: Executing Tasks
NOTE: Setscene tasks completed
NOTE: Tasks Summary: Attempted 8582 tasks of which 8582 didn't need to be rerun and all succeeded.

Summary: There was 1 WARNING message shown.

但し imx-image-full のレシピではインストール対象として指定されていないため conf/local.conf の中などで
IMAGE_INSTALL_append = " qtmultimedia "
とイメージに含めるパッケージの追加指定を行うことで、rootfs イメージに追加されます。

IMAGE_INSTALL_append 実行前に構築されたイメージに含まれるパッケージ一覧と、実行後に構築されたイメージ
に含まれるパッケージ一覧を比較すると、実際に追加されていることを確認できています。

$ diff imx-image-full-imx8mqevk-20200501121506/package.manifest imx-image-full-imx8mqevk-20200514110847/package.manifest
1683a1684,1686
> qtmultimedia
> qtmultimedia-plugins
> qtmultimedia-qmlplugins
$

なお、「meta-multimedia」の項目になにも表示されていない理由は、meta-oe 等と同じように、meta-openembedded
として一括して取得したファイルツリーに含まれているためでして、commit の表示は meta-filesystems にて行われています。

回答ありがとうございます。
教えていただいた方法で、libQt5MultimediaWidget.so.5ライブラリは組み込む事ができました。
弊社で作成したQtアプリケーションを実行しました。
JpegやPng等の静止画は表示させることができましたが、QMediaPlayerおよびQMediaPlaylistを使ったMP4動画ファイルの再生はできませんでした。
インテルCPUのDebian10.1上では正常に動画再生できています。

Qt5ライブラリをビルドする際に別途オプション等が必要でしょうか?

qtmultimedia の do_configure のログをチェックすると
NOTE: qmake configure substitution: ' -alsa -no-feature-openal -pulseaudio -no-gstreamer'
となっており、gstreamerが無効となっています。

===============================================================
DEPENDS += "gstreamer1.0"
PACKAGECONFIG ?= "${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
gstreamer"
===============================================================
以上のようなbbappendを作成することで、
NOTE: qmake configure substitution: ' -alsa -gstreamer 1.0 -no-feature-openal -pulseaudio '
と、gstreamer を有効としたqtmultimediaを生成するように変更となっています。

動作環境が手元に無いので実動作の確認は行っていませんが、構築の確認はできております。

Yoctoを使うのが初めてなので、bbappendを作成する方法なのですが、下記のように行ったところ、ビルドエラーが発生しました。

①bbappend編集
asdusr@yocto-dev:/usr/local/tools-imx8mm/source/imx-yocto-bsp/sources/meta-qt5/recipes-multimedia/gstreamer$ vi gstreamer1.0-plugins-good_%.bbappend

inherit qmake5_paths

PACKAGECONFIG[qt5] = '--enable-qt \
--with-moc="${OE_QMAKE_PATH_EXTERNAL_HOST_BINS}/moc" \
--with-uic="${OE_QMAKE_PATH_EXTERNAL_HOST_BINS}/uic" \
--with-rcc="${OE_QMAKE_PATH_EXTERNAL_HOST_BINS}/rcc" \
,--disable-qt,gstreamer1.0-plugins-base qtbase qtdeclarative qtbase-native'
DEPENDS += "gstreamer1.0"
PACKAGECONFIG ?= "${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \
${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
gstreamer"
~

②bitbake結果
NOTE: Executing Tasks
NOTE: Setscene tasks completed
WARNING: gstreamer1.0-plugins-good-1.16.0.imx-r0 do_configure: QA Issue: gstreamer1.0-plugins-good: invalid PACKAGECONFIG: alsa [invalid-packageconfig]
WARNING: gstreamer1.0-plugins-good-1.16.0.imx-r0 do_configure: QA Issue: gstreamer1.0-plugins-good: invalid PACKAGECONFIG: gstreamer [invalid-packageconfig]
ERROR: imx-image-full-1.0-r0 do_rootfs: Could not invoke dnf. Command '/usr/local/tools-imx8mm/source/imx-yocto-bsp/Build-xwayland-imx8mmevk/tmp/work/imx8mmevk-poky-linux/imx-image-full/1.0-r0/recipe-sysroot-native/usr/bin/dnf -v --rpmverbosity=info -y -c /usr/local/tools-imx8mm/source/imx-yocto-bsp/Build-xwayland-imx8mmevk/tmp/work/imx8mmevk-poky-linux/imx-image-full/1.0-r0/rootfs/etc/dnf/dnf.conf --setopt=reposdir=/usr/local/tools-imx8mm/source/imx-yocto-bsp/Build-xwayland-imx8mmevk/tmp/work/imx8mmevk-poky-linux/imx-image-full/1.0-r0/rootfs/etc/yum.repos.d --installroot=/usr/local/tools-imx8mm/source/imx-yocto-bsp/Build-xwayland-imx8mmevk/tmp/work/imx8mmevk-poky-linux/imx-image-full/1.0-r0/rootfs --setopt=logdir=/usr/local/tools-imx8mm/source/imx-yocto-bsp/Build-xwayland-imx8mmevk/tmp/work/imx8mmevk-poky-linux/imx-image-full/1.0-r0/temp --repofrompath=oe-repo,/usr/local/tools-imx8mm/source/imx-yocto-bsp/Build-xwayland-imx8mmevk/tmp/work/imx8mmevk-poky-linux/imx-image-full/1.0-r0/oe-rootfs-repo --nogpgcheck install dnf jailhouse opencv-apps opencv-samples packagegroup-base-extended packagegroup-core-boot packagegroup-core-full-cmdline packagegroup-core-nfs-server packagegroup-core-ssh-dropbear packagegroup-core-tools-debug packagegroup-core-tools-profile packagegroup-core-tools-testapps packagegroup-fsl-gstreamer1.0 packagegroup-fsl-gstreamer1.0-full packagegroup-fsl-optee-imx packagegroup-fsl-tools-audio packagegroup-fsl-tools-benchmark packagegroup-fsl-tools-gpu packagegroup-fsl-tools-gpu-external packagegroup-fsl-tools-testapps packagegroup-imx-ml packagegroup-qt5-imx packagegroup-tools-bluetooth psplash python3-opencv qtmultimedia rpm run-postinsts weston-init weston-xwayland xterm locale-base-en-us locale-base-en-gb' returned 1:
DNF version: 4.2.2
cachedir: /usr/local/tools-imx8mm/source/imx-yocto-bsp/Build-xwayland-imx8mmevk/tmp/work/imx8mmevk-poky-linux/imx-image-full/1.0-r0/rootfs/var/cache/dnf
Added oe-repo repo from /usr/local/tools-imx8mm/source/imx-yocto-bsp/Build-xwayland-imx8mmevk/tmp/work/imx8mmevk-poky-linux/imx-image-full/1.0-r0/oe-rootfs-repo
repo: using cache for: oe-repo
not found other for:
not found modules for:
not found deltainfo for:
not found updateinfo for:
oe-repo: using metadata from Wed 20 May 2020 11:00:46 AM UTC.
Last metadata expiration check: 0:00:01 ago on Wed 20 May 2020 11:00:49 AM UTC.
No module defaults found
--> Starting dependency resolution
--> Finished dependency resolution
Error:
Problem 1: package packagegroup-fsl-gstreamer1.0-1.0-r0.imx8mmevk requires packagegroup-fsl-gstreamer1.0-network-base, but none of the providers can be installed
- conflicting requests
- nothing provides gstreamer1.0-plugins-good-soup needed by packagegroup-fsl-gstreamer1.0-network-base-1.0-r0.imx8mmevk
Problem 2: package packagegroup-fsl-gstreamer1.0-full-1.0-r0.noarch requires packagegroup-fsl-gstreamer1.0, but none of the providers can be installed
- package packagegroup-fsl-gstreamer1.0-1.0-r0.imx8mmevk requires packagegroup-fsl-gstreamer1.0-network-base, but none of the providers can be installed
- conflicting requests
- nothing provides gstreamer1.0-plugins-good-soup needed by packagegroup-fsl-gstreamer1.0-network-base-1.0-r0.imx8mmevk
(try to add '--skip-broken' to skip uninstallable packages or '--nobest' to use not only best candidate packages)

ERROR: Logfile of failure stored in: /usr/local/tools-imx8mm/source/imx-yocto-bsp/Build-xwayland-imx8mmevk/tmp/work/imx8mmevk-poky-linux/imx-image-full/1.0-r0/temp/log.do_rootfs.11227
ERROR: Task (/usr/local/tools-imx8mm/source/imx-yocto-bsp/sources/meta-imx/meta-sdk/recipes-fsl/images/imx-image-full.bb:do_rootfs) failed with exit code '1'
NOTE: Tasks Summary: Attempted 8471 tasks of which 8449 didn't need to be rerun and 1 failed.

Summary: 1 task failed:

bbappendファイルは既存のファイルを修正するのではなく、新規に作成するのでしょうか?
今回のgstreamerを有効にする方法として、手順を教えていただきたいと思います。

既存のレシピに対して、カスタマイズを行う場合の鉄則ですが、
・既存の(他人が作成し、現在もメンテナンスが行われている)レイヤー内に変更を行わない
というものが有ります。理由として今後アップデートが行われた場合に、自身が行った変更を再度アップデートされたレイヤー内で
行なう必要があるためです。
で、変更点は自身で新規にレイヤーを作成し、その中にbbappendを作成することになります。
レイヤーの作成方法は
https://www.yoctoproject.org/docs/3.0/dev-manual/dev-manual.html#creatin...
にて紹介されています。
当方にて確認した環境では、bitbake-layers create-layer -p 9 meta-multimedia
と、レイヤーの優先度を9に設定して生成します。
今度を実行するディレクトリですが、既存のレイヤーの中ではなく、別の場所に作成することをお勧めします。
作成後は、buildディレクトリに移動して、生成したレイヤーをbitbake-layers add-layer を使用して、bblayers.confに追加を行います。

bbappend ファイルは、生成したレイヤーに、recipes-qt/qt5 というディレクトリを作成しその中にbbappendファイルを追加しています。
レイヤー内のbb/bbappendファイルは、recipes- で始まるディレクトリ内に配置する必要があります。(conf/layer.conf内のBBFILES変数への追加の記述から)
追加したレイヤー内のファイル構成は以下となります。
meta-multimedia/
 |-- COPYING.MIT
 |-- README
 |-- conf
 | `-- layer.conf
 |-- recipes-example
 | `-- example
 | `-- example_0.1.bb
 `-- recipes-qt
  `-- qt5
  `-- qtmultimedia_git.bbappend

bitbake-layersコマンドを実行するディレクトリについて教えて下さい。

プロジェクトのダウンロードは下記コマンドで実行します。
$ mkdir imx-yocto-bsp
$ cd imx-yocto-bsp
/imx-yocto-bsp $ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-zeus -m imx-5.4.3-1.0.0.xml
/imx-yocto-bsp $ repo sync

下記コマンドを実行すると、[imx-yocto-bsp/Build-xwayland-imx8mmevk]というディレクトリに移動します。
/imx-yocto-bsp $ DISTRO=fsl-imx-xwayland MACHINE=imx8mmevk source imx-setup-release.sh -b Build-xwayland-imx8mmevk

下記コマンドを実行することでYoctoのイメージを構築できました。
/imx-yocto-bsp/Build-xwayland-imx8mmevk $ bitbake imx-image-full

このあと、新しいコンソールを起動させて、「/imx-yocto-bsp/Build-xwayland-imx8mmevk」に入っても、bitbakeコマンドは見つかりませんでした。
現状、毎回、「DISTRO=fsl-imx-xwayland MACHINE=imx8mmevk source imx-setup-release.sh -b Build-xwayland-imx8mmevk」コマンドを実行しています。
この方法は正しいのでしょうか?

また、新規レイヤを作成するために、「bitbake-layers」コマンドを実行するのですが、
これは「/imx-yocto-bsp/Build-xwayland-imx8mmevk」以下で行うのでしょうか?
それとも、全く別のディレクトリで行うのでしょうか?

初歩的な質問ばかりで申し訳ありません。

imx-setup-releath.h と同じディレクトリに有る setup-environment スクリプトでPATHや環境変数が設定されます。
具体的には
$ cd imx-yocto-bsp
$ source setup-environment Build-xwayland-imx8mmevk
で、bitbake コマンドなどが使用可能となります。

レイヤーを作成するディレクトリですが、buildディレクトリ Build-xwayland-imx8mmevk 以外の場所に
作成することをお勧めします。
なお、作成したレイヤーをconf/bblayers.conf に追加する bitbake-layers add-layer の実施は、
buildディレクトリで実施する必要があります。

丁寧な説明ありがとうございます。
おかげさまで、i.MX8M mini EVKのYocto OSイメージ上で、Qtアプリケーションを使ってMP4動画再生させることはできました。

ただし、QtアプリケーションでMP4動画を再生した場合は、動画がコマ送りのような動作になります。
gst-playで同じ動画を再生した場合は、問題なく動作しました。

また、同じQtアプリケーションプログラムを、x86用にビルドしてx86PC(Debian)で実行すると、正常に動画再生できています。
おそらく、Qtの動画再生ライブラリがi.MX8MminiのVPU/GPUに最適化されていないのではないかと思われます。
今後の対応は検討します。

本トピックで、「libQt5MultimediaWidgets.so.5」が見つからなかったので、組み込むために「qtmultimedia」を追加してくださいと教えていただきました。
IMAGE_INSTALL_append = " qtmultimedia "

今回、「libQt5SerialPort. so.5」が見つかりませんでした。
都度確認させていただくわけにはいかないので、組み込みたいライブラリのパッケージ名を検索する方法を教えて下さい。

tmp/work に移動して、find . -name "libQt5SerialPort. so" を実行して表示されるファイルの中で、
packages-split ディレクトリ以下に含まれるもののうち、dbg や dev が付かないディレクトリ以下のものが、
IMAGE_INSTALL 変数に追加するパッケージのインストールイメージが保存されているディレクトリとなります。
この場合のディレクトリ名=パッケージ名となります。