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

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

Leave a comment

Your email ID will be kept confidential. Required fields are marked *



* Your comment will be reviewed and then added. Thank you.

Related Blog

Latest Blog

2020年7月17日星期五
Experimenting with Flutter on Torizon
2020年6月30日星期二
Toradex 嵌入式 Linux 发布跟进 Yocto Project 长期支持
2019年7月17日星期三
Toradex 嵌入式 Linux BSP 3.x 背后的动机
Have a Question?