Blog:
i.MXでQtWaylandの実現の案内
このブログ投稿では、Qt アプリケーションで EGL / KMS を使用して次のことを行う方法を示します:
- Wayland で正しく動作しない Qt ライブラリを使用すること (例: QtVirtualKeyboard)
- 2つ以上の画面を使用すること(マルチスクリーン)
まず最初にBSP6でQTの開発を行う方法は弊社のBSP5用のマニュアルをご参照ください。
大雑把には方法は同じです。
BSP5用のマニュアルではUbuntu20.04LTSを使用していますが弊社はBSP6ではUbuntu22.04LTSを使用しています。
- OS開発環境構築マニュアルBSP5用
https://www.toradex.com/ja-jp/blog/linux-os-development-environment-construction-manual-for-bsp-5 - OS カスタムマニュアル BSP5用
https://www.toradex.com/ja-jp/blog/linux-os-custom-manual-for-bsp-5
このマニュアルは手順通り進めるわけではなくカスタム時の参考資料です。 - QTアプリケーション 開発マニュアル BSP5用
https://www.toradex.com/ja-jp/blog/linux-qt-application-development-maual-for-bsp5 - 下記にToradexの説明もあります。こちらはBSP6の説明もあります。
https://developer.toradex.com/linux-bsp/os-development/build-yocto/build-a-reference-image-with-yocto-projectopenembedded/ - BSP6はkirkstoneになります。レシピの取得方法は下記のような指定です。
repo init -u git://git.toradex.com/toradex-manifest.git -b kirkstone-6.x.y -m tdxref/default.xml - EGLFSを有効にするカスタムは下記のサイトを参考にします。
https://programmersought.com/article/16676392369/
これはNXPのライセンス規約に同意することを意味します。
(マニュアルの手順でも出てきます。)ACCEPT_FSL_EULA = "1"
qtにeglfsとkmsのオプションをつけます。PACKAGECONFIG_append_pn-qtbase = " sql-sqlite eglfs kms"
(sql-sqliteはおそらく関係ありません。)
これもgstreamerを使うためですのでおそらく不要です。PACKAGECONFIG_append_pn-qtmultimedia = " gstreamer"
上記のサイトにはないですが下記も追加します。
QTCreatorを使うときにrsyncコマンドが必要です。IMAGE_INSTALL:append = " rsync"
QTVirtualkeyboardをつか場合下記のファイルに依存関係を追加します。layers/meta-qt5/recipes-qt/packagegroups/packagegroup-qt5-toolchain-target.bb
RDEPENDS:${PN} += "qtvirtualkeyboard qtvirtualkeyboard-dev qtvirtualkeyboard-mkspecs"
上記の修正でOSイメージをbitbakeして書き込みます。(マニュアル参照)
SDKを出力してインストールします。(マニュアル参照)
モジュール起動後デモアプリとwestonを無効化します。
systemctl disable wayland-app-launch
systemctl disable weston
systemctl disable weston.socket
LVDSとHDMIの2画面であれば下記のような内容です。
kms.conf { "device": "/dev/dri/card1", "hwcursor": false, "pbuffers": false, "outputs": [ { "name": "HDMI-A-1", "mode": "800x640", "virtualIndex": 0, "primary": true }, { "name": "LVDS1", "mode": "1280x800", "virtualIndex": 1 } ] }
/boot/overlays.txtを修正してLVDS用にします。
#fdt_overlays=verdin-imx8mp_hdmi_overlay.dtbo verdin-imx8mp_dsi-to-hdmi_overlay.dtbo verdin-imx8mp_spidev_overlay.dtbo
fdt_overlays=verdin-imx8mp_hdmi_overlay.dtbo verdin-imx8mp_spidev_overlay.dtbo verdin-imx8mp_dsi-to-lvds_panel-cap-touch-10inch-lvds_overlay.dtbo
qtwayland_compositor側とqtwayland_client側で別の環境変数を使う必要があるため
それぞれシェルを作ります。(下記の内容は不要なものもあると思いますが弊社が動作確認した設定です。)
#!/bin/bash #export WAYLAND_DEBUG=1 #export QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=wayland-egl export QT_QPA_EGLFS_KMS_CONFIG=/etc/kms.conf export QT_QPA_EGLFS_INTEGRATION=eglfs_kms export QT_QPA_PLATFORM=eglfs export QT_QPA_EGLFS_KMS_ATOMIC=1 export QT_QPA_EGLFS_NO_LIBINPUT=1 export QT_IM_MODULE=qtvirtualkeyboard export XDG_RUNTIME_DIR=/run/user/0 export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/dbus_session_socket export WAYLAND_DISPLAY=/run/wayland-0 export QT_QPA_PLATFORM=eglfs export FB_MULTI_BUFFER=2 export QT_QPA_EGLFS_FORCEVSYNC=1 export QT_QPA_EGLFS_FORCE888=1 export QT_QPA_EGLFS_KMS_ATOMIC=1
#!/bin/bash #export WAYLAND_DEBUG=1 export XDG_RUNTIME_DIR=/run/user/0 export WAYLAND_DISPLAY=/run/user/0/wayland-0 export QT_QPA_PLATFORM=wayland-egl #export QT_WAYLAND_SHELL_INTEGRATION=xdg-shell-v5
桐川篤史・岡本無線電機
ガルシアアルバロ・Toradex(トラデックス)