Qt for VxWorks
欲获取更多信息,请联系 Qt 公司:https://www.qt.io/contact-us/
支持架构和 VxWorks 版本
- Qt 6.7 在 VxWorks 23.09 上进行了验证,支持架构为 ARM-v7。
如果您对后续的 Qt 版本感兴趣,请联系 Qt 专业服务。
VxWorks 的要求
Qt Widgets 应用程序
- POSIX 支持
- C++17 支持
Qt Quick 2 应用程序
Qt Widgets 应用程序所需的全部功能,以及以下功能:
- GPU 设备 (GPUDEV) 用于 OpenGL ES 2.0
支持模块
大多数基本 Qt 模块 和一些附加模块得到支持。
支持基本模块
Qt 模块 | 支持的功能 | 注意 |
---|---|---|
Qt 核心模块 | ||
Qt GUI 模块 | ||
Qt 网络 | ||
Qt Qml | ||
Qt Quick | ||
Qt Quick 控件 | ||
Qt Quick 对话框 | ||
Qt Quick 布局 | ||
Qt Quick 测试 | ||
Qt 测试 | ||
Qt Widgets |
支持附加模块
Qt 附加模块 | 注意 |
---|---|
Qt 并发模块 | |
Qt GRPC/Protobuf | |
Qt 图形 | |
Qt 图像格式 | |
Qt 多媒体 | |
Qt 本地接口 | |
Qt OpenGL | |
Qt Quick 3D | |
Qt Quick 编译器 | |
Qt Quick 特效 | |
Qt SQL | |
Qt SVG | |
Qt 虚拟键盘 |
注意:当运行配置工具时,您可以通过 -skip <module> 选项明确排除不受支持的或未使用的模块。
平台说明
从 Qt 5.0 版本开始,Qt 不再包含自己的窗口系统实现:QWS 不再是受支持的平台。对于单进程用例,Qt 平台抽象 是一个更优的解决方案。
有一个插件适用于 VxWorks:EGLFS。此插件的可用性取决于 Qt 的配置。
为特定设备配置
为了给特定设备构建 Qt,需要编译主机上的 Qt6 安装、工具链和 sysroot。另外,某些设备还需要针对 EGL 和 OpenGL 2.0 支持的供应商特定的适配代码。
在运行 configure 和构建 Qt 6 之前,需要在命令提示符中打开 VxWorks 开发 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配置为使用共享库。要静态编译Qt 6,请在configure添加-static
选项。
./configure \ -cmake-generator "Ninja" \ -icu \ -no-feature-timezone \ -no-feature-vulkan \ -platform vxworks-clang \ -qt-host-path <path_to_qt6_host_installation_dir> \ -sysroot <path_to_vxworks_vsb_dir>/fsl_imx6_<vsb_version>_VSB \ -qpa "eglfs" \ -DQT_QPA_EGLFS_INTEGRATION=eglfs_viv \ -prefix /sd0:1/qt6rtp \ -extprefix <path_to_host_dir>/qt6rtp \ -nomake tools \ -nomake examples
建议使用影子构建来构建Qt 6。更多相关信息,请参阅Qt配置选项。
构建和安装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设备的推荐插件。
EGLFS强制第一个顶级窗口(无论是QWidget还是QQuickView)成为全屏。此窗口也被选择为根小部件窗口,其中所有其他顶级小部件(例如对话框、弹出菜单或组合框的下拉菜单)都被合成。这是因为在使用EGLFS的情况下,始终只有一个本地窗口和一个EGL窗口表面,这些属于首先创建的小部件或窗口。当应用程序存在一个整个生命周期的主窗口,并且所有其他小部件要么不是顶级小部件,要么在主窗口显示之后创建时,这种方法工作得很好。
对于基于OpenGL的窗口还有进一步的限制。从Qt 6.7开始,EGLFS支持单个全屏的GL窗口(例如,基于OpenGL的QWindow、QQuickView或QGLWidget)。打开额外的OpenGL窗口或与基于QWidget的内容混合不受支持,这会导致应用程序因错误信息而终止。
如有必要,可以通过环境变量配置EGLFS
QT_QPA_EGLFS_FB
- 覆盖了帧缓冲设备。默认为/dev/fb0
。在大多数嵌入式平台上,这并不重要,因为仅使用帧缓冲区来查询设置,如显示尺寸。但在某些设备上,此参数提供了在多个显示设置中指定使用哪个显示的功能,类似于VxWorksFB中的fb
参数。QT_QPA_EGLFS_WIDTH
和QT_QPA_EGLFS_HEIGHT
- 包含屏幕宽度和高度(像素)。虽然EGLFS尝试从帧缓冲设备/dev/fb0中确定尺寸,但这并不总能行得通,可能需要手动指定大小。QT_QPA_EGLFS_PHYSICAL_WIDTH
和QT_QPA_EGLFS_PHYSICAL_HEIGHT
- 以毫米为单位的物理屏幕宽度和高度。在设备上,如 /dev/fb0 空闲或查询失败时,值将基于默认DPI 100进行计算。此变量可用于覆盖此类默认值。QT_QPA_EGLFS_DEPTH
- 覆盖屏幕的颜色深度。在设备上,如 /dev/fb0 空闲或查询失败时,使用默认值32。此变量可用于覆盖此类默认值。请注意,这只会影响到 QScreen 报告的颜色深度值。它与EGL配置颜色深度和OpenGL渲染中的颜色深度无关。QT_QPA_EGLFS_SWAPINTERVAL
- 默认情况下,请求交换间隔为1
。这允许与显示的垂直刷新同步。此环境变量可以用来覆盖此默认值。例如,传递 0 将禁用阻塞在交换上,结果是无同步尽可能快速运行。QT_QPA_EGLFS_FORCE888
- 当设置时,创建新的环境、窗口或离屏表面时忽略红色、绿色和蓝色颜色通道的大小。相反,插件请求8位通道的配置。这对于默认选中的配置少于32位或24位每像素的设备很有用,但这些配置已知不合适,例如由于色带效应。不需要更改所有应用,此变量提供了一个更容易的快捷方式来为指定设备强制24/32位像素配置。QT_QPA_EGLFS_DEBUG
- 当设置时,一些调试信息将打印到调试输出。例如,当创建新上下文时,将打印输入 QSurfaceFormat 和选择的EGL配置的属性。与Qt Quick的QSG_INFO
变量一起,这可以提供有关EGL配置故障排除问题的有用信息。QT_QPA_EGLFS_INTEGRATION
- 除了编译内 钩子 外,还可以以动态加载插件的形式提供特定于设备和供应商的适应。此环境变量强制使用特定的插件。例如,将其设置为 eglfs_kms 使用KMS/DRM后端。这仅在未指定设备makesspec中的静态编译钩子时才为选项。实际上,传统的编译内钩子很少使用,几乎所有后端现在都已迁移到插件。设备makesspec仍包含一个相关的EGLFS_DEVICE_INTEGRATION
条目:特定设备的首选后端名称。这是可选的,但非常有用,可以避免在目标系统中有多个插件时设置此环境变量。在桌面环境中,根据是否存在DISPLAY
环境变量,优先选择KMS或X11后端。
除了 QT_QPA_EGLFS_DEBUG
,EGLFS 还支持Qt更现代的分类日志系统。以下日志类别可用
qt.qpa.egldeviceintegration
– 启用对动态加载后端的日志记录。非常有用,可以检查正在使用哪个后端。qt.qpa.input
– 使evdev输入处理器启用调试输出。非常有用,可以检查给定的输入设备是否被正确识别并打开。
运行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("<Qt6_app>", 200, 0x100000, 0, 0x01000000)
限制
显存
拥有固定量专用显存的系统可能在运行基于 Qt Quick 或类似 QOpenGLWidget 类的 Qt 应用程序之前需要额外注意。默认设置可能不足以支持这类应用程序,尤其是在高分辨率(例如,全高清)屏幕上显示时。在这种情况下,它们可能会以意外的方式进行失败。因此,建议确保至少有 128 MB 的 GPU 内存可用。对于没有为 GPU 保留固定内存的系统,这不是问题。
© 2024 Qt 公司。包含在此的文档贡献者的文档版权属于他们各自的所有者。本提供的文档根据自由软件基金会发布的 GNU 自由文档许可版本 1.3 的条款提供。Qt 和相应标志是芬兰和/或全球其他地区的 The Qt Company Ltd. 的商标。所有其他商标属于各自所有者。