By Toradex胡珊逢
在嵌入式领域中Qt 作为普遍选择的 UI 方案目前已经发布 Qt6 版本。本文将介绍如何为 Toradex 的计算机模块使用 Yocto Project 将 Qt6 集成到镜像里。
首先根据这里的说明,准备好Yocto Project 的编译环境。这里我们选择 Toradex 最新的 Linux BSP V6 为例,其基于 kirkstone 分支,这也是一个 LTS 版本。
进入layers 目录,使用下面命令下载 Qt6.4.3 版本的 meta-qt6 文件。
-------------------------------
git clone -b 6.4.3 git://code.qt.io/yocto/meta-qt6.git
-------------------------------
在meta-qt6/classes/ 目录下创建 populate_sdk_qt6.bbclass 文件。
-------------------------------
SUMMARY = "Meta package for building an installable Qt6 toolchain and SDK"
inherit populate_sdk populate_sdk_qt6_base
TOOLCHAIN_HOST_TASK:append = " nativesdk-packagegroup-qt6-toolchain-host"
TOOLCHAIN_TARGET_TASK:append = " packagegroup-qt6-modules"
FEATURE_PACKAGES_qtcreator-debug = "packagegroup-qt6-qtcreator-debug"
-------------------------------
在meta-qt6/recipes-qt/packagegroups/ 目录下创建 packagegroup-qt6-qtcreator-debug.bb 文件。
-------------------------------
SUMMARY = "Remote debugging tools for QtCreator integration"
LICENSE = "MIT"
inherit packagegroup
# Override by distro if needed
VIRTUAL-RUNTIME_qtcreator-debug-ssh-daemon ?= "openssh-sshd"
RDEPENDS:${PN} = " \
gdbserver \
${VIRTUAL-RUNTIME_qtcreator-debug-ssh-daemon} \
openssh-sftp-server \
qtdeclarative \
"
-------------------------------
在meta-toradex-demos/recipes-images/images/ 目录下创建 packagegroup-tdx-qt6.bb 文件。
-------------------------------
SUMMARY = "Packagegroup which provides most QT6 libraries and a QT6 demo"
PACKAGE_ARCH = "${MACHINE_ARCH}"
inherit packagegroup
PROVIDES = "${PACKAGES}"
PACKAGES += " \
${PN}-fonts \
${PN}-libs \
"
RRECOMMENDS:${PN} = " \
${PN}-fonts \
${PN}-libs \
"
SUMMARY:${PN}-fonts = "Some fonts useful for QT5"
RRECOMMENDS:${PN}-fonts = " \
ttf-dejavu-common \
ttf-dejavu-sans \
ttf-dejavu-sans-mono \
ttf-dejavu-serif \
"
SUMMARY:${PN}-libs = "QT5 libraries"
RRECOMMENDS:${PN}-libs = " \
qt3d \
qtbase \
qtcharts \
qtcoap \
qtconnectivity \
qtdatavis3d \
qtdeclarative \
qtimageformats \
qtlottie \
qtmqtt \
qtmultimedia \
qtnetworkauth \
qtopcua \
qtquick3d \
qtquicktimeline \
qtremoteobjects \
qtscxml \
qtsensors \
qtserialbus \
qtserialport \
qtsvg \
qttools \
qttranslations \
qtvirtualkeyboard \
${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'qtwayland', '', d)} \
qtwebchannel \
qtwebsockets \
"
-------------------------------
在meta-toradex-demos/recipes-images/images/ 目录下创建 tdx-reference-multimedia-qt6-image.bb 文件。
-------------------------------
require tdx-reference-minimal-image.bb
SUMMARY = "Toradex Embedded Linux Reference Multimedia Image"
DESCRIPTION = "Image for BSP verification with QT and multimedia features"
inherit populate_sdk_qt6
#Prefix to the resulting deployable tarball name
export IMAGE_BASENAME = "Reference-Multimedia-Image"
IMAGE_FEATURES += " \
${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'weston', \
bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11-base', '', d), d)} \
"
IMAGE_INSTALL += " \
packagegroup-tdx-cli \
packagegroup-tdx-graphical \
packagegroup-tdx-qt6 \
packagegroup-fsl-isp \
\
bash \
coreutils \
less \
makedevs \
mime-support \
net-tools \
util-linux \
v4l-utils \
\
gpicview \
media-files \
"
-------------------------------
在build/conf/bblayers.conf 将 meta-qt6 添加进来,并移除原来的 meta-qt5。
-------------------------------
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
LCONF_VERSION = "7"
BBPATH = "${TOPDIR}"
BBFILES ?= ""
BBLAYERS ?= " \
${TOPDIR}/../layers/meta-toradex-nxp \
${TOPDIR}/../layers/meta-freescale \
${TOPDIR}/../layers/meta-freescale-3rdparty \
\
${TOPDIR}/../layers/meta-toradex-bsp-common \
\
${TOPDIR}/../layers/meta-openembedded/meta-oe \
${TOPDIR}/../layers/meta-openembedded/meta-filesystems \
${TOPDIR}/../layers/meta-openembedded/meta-gnome \
${TOPDIR}/../layers/meta-openembedded/meta-xfce \
${TOPDIR}/../layers/meta-openembedded/meta-networking \
${TOPDIR}/../layers/meta-openembedded/meta-multimedia \
${TOPDIR}/../layers/meta-openembedded/meta-python \
${TOPDIR}/../layers/meta-freescale-distro \
${TOPDIR}/../layers/meta-toradex-demos \
${TOPDIR}/../layers/meta-qt5 \
\
\
${TOPDIR}/../layers/meta-toradex-distro \
${TOPDIR}/../layers/meta-yocto/meta-poky \
${TOPDIR}/../layers/openembedded-core/meta \
"
#${TOPDIR}/../layers/meta-qt5
-------------------------------
build/conf/local.conf 添加下面两个配比,移除 X11 和 directfb 相关配置。
-------------------------------
DISTRO_FEATURES:remove = " directfb x11"
IMAGE_INSTALL:remove = " gpicview"
-------------------------------
最后使用bitbake 命令即可编译包含 Qt6 的镜像和 SDK。