Qt 6.7 and VxWorks 7

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)