Blog:
iMX8 Qt5 移植和开发

2019年10月14日星期一

NXP 的 i.MX8 处理器有其出色的 CPU 和 GPU 性能吸引了从汽车、工业自动化到医疗、IoT、消费类电子等诸多领域的注意。该处理器为创建优秀的人机交互方案提供了一个新的平台。本文接下来将介绍如何在 Colibri iMX8 平台上进行广受欢迎的GUI方案 Qt 的移植和开发。

Qt编译

交叉编译 Qt 是一项较为繁重的任务,特别是从 Qt 源码直接编译,我们曾经撰写过一篇文章来阐述如何完成这一操作。但是本文会采用 Yocto/OpenEmbedded 框架来完成。Yocto/OpenEmbedded 能够让用户免受交叉编译过程中各类软件包的依赖关系,并利用现有的 OpenEmbedded layer 和 recipes,方便集成第三方软件,例如Qt等。

Toradex为其模块提供完善的 Yocto/OpenEmbedded 配置文件,用户下载后能够直接使用。自 Toradex的 V3.0 BSP 开始,BSP 基于 Poky,这是一个相对精简版本,因此用户需要根据项目需求添加所需组件,如常见的 Qt、Gstreamer 等。

首先根据该文章的介绍,下载适用于 Colibri iMX8 的 Yocto 环境,BSP 3.0,thud 分支。

在 Yocto 中的 layers/meta-toradex-demos/recipes-images/images 目录添加新的 bb 文件如 qt5-eglfs-wayland.bb ,包含 Qt 的 BSP 从该文件生成。这里 console-tdx-image.bb 作为基础,向里面添加 Qt、Gstreamer 组件,以及中文字体。当然还可以添加你所需要的软件,例如时区信息 tzdata 等。

在 layers/meta-toradex-demos/recipes-qt/qt5/packagegroup-qt5.bb中 移除qtwebkit。移除 SDK 中的 qtwebkit qt3d,创建 layers/meta-qt5/recipes-qt/packagegroups中添加packagegroup-qt5-toolchain-target.bbappend 文件:

#remove qtwebkit qt3d
RDEPENDS_${PN}_remove = "qtwebkit qtwebkit-dev qtwebkit-mkspecs qtwebkit-qmlplugins qt3d qt3d-dev qt3d-mkspecs qt3d-qmlplugins"

由于目前 thud 版本 Yocto 在编译 Qt5.11 时会遇到上述组件编译错误,如果用户不使用这些组件,对其则不产生影响。后续我们将会完善编译过程。

接下来在 build/conf/local.conf 的结尾添加以下内容:

IMAGE_INSTALL_append = " qtwayland rsync"
PACKAGECONFIG_append_pn-qtbase = " libinput gles2 freetype"
PACKAGECONFIG_append_pn-qtwayland = " wayland-egl"
DISTRO_FEATURES_remove = " x11"

最后执行编译,运行下面命令

MACHINE=colibri-imx8x bitbake qt5-eglfs-wayland

整个编译过程会持续数个小时,最后在 build/deploy 目录的 images/colibri-imx8x 和 sdk 文件夹中会生成BSP安装包和 SDK 工具。也可以从我们的 FTP 服务器上下载相应的文件。

BSP安装

Toradex 的 iMX8 模块均支持 Toradex Easy Installer 安装 BSP,用户可以参考该网页说明进行操作。

Qt SDK配置

Qt5.11 的 SDK 配置请参考我们开发者中心的说明。

Qt 应用开发

我们将使用Qt官方演示 touch-interaction 为例进行说明。按照上面说明正确完成 SDK 配置后,可以直接编译并通过部署该 demo。QtCreator 的应用部署需要使用rsync,因此我们在之前的 local.conf 配置将其添加进来。

Cobliri iMX8 V3.0 BSP 采用了 Wayland 作为图形化后端,Qt 的运行也将基 于wayland。对于电阻触摸屏用户,在运行的时需要先校准触摸屏。运行 weston-touch-calibrator,获取触摸设备路径。

root@colibri-imx8x:~/touchinteraction# weston-touch-calibrator
could not load cursor 'dnd-move'
could not load cursor 'dnd-copy'
could not load cursor 'dnd-none'
device "/sys/devices/platform/5a800000.i2c/i2c-16/16-002c/input/input1/event1" - head "DPI-1"

校准触摸屏

root@colibri-imx8x:~# weston-touch-calibrator /sys/devices/platform/5a800000.i2c/i2c-16/16-002c/input/input1/event1

依次点击屏幕上的校准坐标。

对于电容触摸屏用户,则无需校准,可以直接使用。当然前提是触摸屏的驱动能够正常工作。

运行Qt应用

root@colibri-imx8x:~/touchinteraction# export QT_QPA_PLATFORM=wayland
root@colibri-imx8x:~/touchinteraction# export XDG_RUNTIME_DIR=/run/user/0

root@colibri-imx8x:~/touchinteraction# ./touchinteraction

总结

Qt 和 iMX8 的组合为优秀的用户交互体验提供了一个良好的实现平台。Toradex 致力于为用户提供易于使用的 iMX8 平台,无论是稳定、可靠的硬件模块,还是丰富的软件工具,帮助用于快速快发 Qt 应用。上面简要地介绍了在 iMX8 上 Qt 的移植和开发,该方法同样也适用于 Toradex 其他的 iMX8产品,如最高端的i.MX8QuadMax

作者: 胡珊逢,FAE,韬睿(上海)

评论

Please login to leave a comment!
Have a Question?