2024年4月2日,Qt 6.7成功发布了!
笔者比较关注的是QT 6.7对VxWorks的支持更新。
支持的架构和 VxWorks 版本
Qt 6.7 在 VxWorks SR 23.09 上进行了验证,支持的架构是 ARM-v7。
对VxWorks系统的要求
Qt 小部件应用程序
- POSIX 支持
- C++17 支持
Qt Quick 2 应用程序
Qt Widgets应用程序所需要的所有功能,以及以下功能:
- 适用于 OpenGL ES 2.0 的 GPU 设备 (GPUDEV)
支持的模块
支持最基本的Qt 模块以及下面的附加模块。
支持的基本模块
Qt Module | Supported Features | Notes |
Qt Core | ||
Qt GUI | ||
Qt Network | ||
Qt Qml | ||
Qt Quick | ||
Qt Quick Controls | ||
Qt Quick Dialogs | ||
Qt Quick Layouts | ||
Qt Quick Test | ||
Qt Test | ||
Qt Widgets |
支持的附加组件
Qt Add-Ons | Notes |
Qt Concurrent | |
Qt GRPC/Protobuf | |
Qt Graphs | |
Qt Image Formats | |
Qt Multimedia | |
Qt Native Interfaces | |
Qt OpenGL | |
Qt Quick 3D | |
Qt Quick Compiler | |
Qt Quick Effects | |
Qt SQL | |
Qt SVG | |
Qt Virtual Keyboard |
注意:运行配置工具时,您可以通过 -skip <module>
选项从编译中显式地排除不支持或未使用的模块。
平台注意点
随着 Qt 5.0 的发布,Qt 不再包含自己的窗口系统实现:QWS 不再是受支持的平台。对于单进程用例,Qt Platform Abstraction是一个优越的解决方案。
有一个插件可以在 VxWorks 上使用:EGLFS。该插件的可用性取决于 Qt 编译时候的配置。
针对具体的设备进行QT配置
为给定的设备编译 Qt 需要安装 Qt6 的编译主机、工具链和 sysroot。此外,某些设备还需要供应商的支持 EGL 和 OpenGL 2.0的移植代码。
在运行配置和编译 Qt 6 之前,需要在命令行提示符中打开VxWorks Development Shell 。
Linux平台
cd <VxWorks installation directory>
./wrenv.sh -p vxworks
Windows平台
cd <VxWorks installation directory>
wrenv -p vxworks
以下是针对BD-SL-i.MX6开发板的配置示例。对于大多数 VxWorks 开发板,配置命令看起来非常相似。默认情况下,Qt 6 配置是使用共享库。要编译QT6的静态库,请添加-static
配置选项。
./configure \
-cmake-generator "Ninja" \
-icu \
-no-feature-timezone \
-no-feature-vulkan \
-platform vxworks-clang \
-qt-host-path \
-sysroot /fsl_imx6__VSB \
-qpa "eglfs" \
-DQT_QPA_EGLFS_INTEGRATION=eglfs_viv \
-prefix /sd0:1/qt6rtp \
-extprefix /qt6rtp \
-nomake tools \
-nomake examples
编译和安装Qt 6
ninja
ninja install
VxWorks 设备的平台插件
EGLFS
EGL是 OpenGL 和本机窗口系统之间的接口。 Qt 可以使用 EGL 进行上下文和表面管理。但是,该 API 不包含平台细节。本机窗口(不一定是屏幕上的实际窗口)的创建仍然必须通过特定于平台的方式来完成。因此需要针对主板或 GPU 的适配代码。此类改编可以作为EGLFS 挂钩(编译到平台插件中的单个源文件)或作为动态加载的EGL 设备集成插件提供。
EGLFS 是一个平台插件,用于在 EGL 和 OpenGL ES 2.0 之上运行 Qt 6 应用程序,而无需实际的窗口系统(如 X11 或 Wayland)。除了 Qt Quick 2 和本机 OpenGL 应用程序之外,它还支持软件渲染窗口(例如QWidget) 也。在后一种情况下,小部件的内容使用 CPU 渲染为图像,然后上传到纹理并由插件合成。
这是针对包含 GPU 的现代 VxWorks 设备的推荐插件。
运行 Qt 应用程序
以下示例显示了在使用共享库编译 Qt 6 时如何启动应用程序。针对静态编译的Qt 6,无需使用LD_LIBRARY_PATH
环境变量。该变量仅需要用来指向 VxWorks 共享库(例如 libc 和 OpenGL ES 2.0)的位置。 而针对Qt 6 静态库是不需要它的。
putenv "LD_LIBRARY_PATH=/sd0:1/lib"
cd "/sd0:1"
rtpSp("", 200, 0x100000, 0, 0x01000000)