Qt für VxWorks
Weitere Informationen erhalten Sie bei The Qt Company: https://www.qt.io/contact-us/
Lizenzierung von Qt für VxWorks
„Qt for VxWorks“ ist unter der „Qt for Device Creation Professional (DCP)“-Lizenz erhältlich. Weitere Informationen finden Sie unter „Qt-Preise“.
Unterstützte Architekturen und VxWorks-Versionen
Qt 6.10 wurde unter VxWorks 25.03 getestet.
Unterstützte Architekturen:
- ARM-v7 – Getestet auf BD-SL-i.MX6. Verwendetes BSP: fsl_imx6
- x86_64 – Getestet auf Intel NUC6i3SYH. Verwendetes BSP: itl_generic
Wenn Sie an neueren Qt-Versionen interessiert sind, wenden Sie sich bitte an Qt Professional Services.
Anforderungen für VxWorks
Qt Widgets Anwendungen
- POSIX-Unterstützung
- C++17-Unterstützung
Qt Quick 2 Anwendungen
Alle Funktionen, die für „ Qt Widgets “-Anwendungen erforderlich sind, sowie zusätzlich Folgendes:
- GPU-Gerät (GPUDEV) für OpenGL ES 2.0
Unterstützte Module
Die wichtigsten Qt-Module sowie einige Zusatzmodule werden unterstützt.
Unterstützte Kernmodule
| Qt-Modul | Hinweise |
|---|---|
| Qt Core | QProcess wird nicht unterstützt. QLocalSocket und QLocalServer unterstützen nur SOCK_SEQPACKET. |
| Qt GUI | Nicht zutreffend |
| Qt Network | Nicht zutreffend |
| Qt Qml | Nicht zutreffend |
| Qt Quick | Nicht zutreffend |
| Qt Quick Controls | Nicht zutreffend |
| Qt Quick Dialogs | Nicht zutreffend |
| Qt Quick Layouts | Nicht zutreffend |
| Qt Quick Test | Nicht zutreffend |
| Qt Test | Nicht zutreffend |
| Qt Widgets | Nicht zutreffend |
Unterstützte Add-ons
| Qt-Add-ons |
|---|
| Qt Concurrent |
| Qt GRPC/Protobuf |
| Qt Graphs |
| Qt Image Formats |
| Qt Multimedia |
| Native Qt-Schnittstellen |
| Qt OpenGL |
| Qt Quick 3D |
| Qt Quick Compiler |
| Qt Quick Effects |
| Qt SQL |
| Qt SVG |
| Qt Virtual Keyboard |
Hinweis: Sie können nicht unterstützte oder ungenutzte Module beim Ausführen des Befehls „configure“ explizit über die Option -skip <Modul> vom Build ausschließen.
Hinweise zur Plattform
Qt ist für die Verwendung in RTP-Anwendungen vorbereitet; DKM wird nicht unterstützt.
Mit der Veröffentlichung von Qt 5.0 enthält Qt keine eigene Implementierung eines Fenstersystems mehr: QWS wird nicht mehr als Plattform unterstützt. Für Anwendungsfälle mit einem einzigen Prozess ist die Qt Platform Abstraction die bessere Lösung.
Es gibt ein Plugin, das unter VxWorks verwendet werden kann: EGLFS. Die Verfügbarkeit dieses Plugins hängt von der Konfiguration von Qt ab.
Konfiguration für ein bestimmtes Gerät
Bereiten Sie Ihre Umgebung vor, indem Sie das VxWorks SDK installieren und eine WindRiver-Lizenz erwerben, die für das Installationsprogramm und zum Erstellen von VxWorks-Images benötigt wird. Suchen Sie unter {https://gallery.windriver.com/portal/products} nach dem passenden Installationsprogramm.
Das Erstellen von Qt für ein bestimmtes Gerät erfordert eine Qt-6-Installation auf dem Kompilierungshost, eine Toolchain und ein Sysroot. Weitere Informationen finden Sie unter „Cross-Kompilierung von Qt “. Darüber hinaus erfordern einige Geräte herstellerspezifischen Anpassungscode für die Unterstützung von EGL und OpenGL 2.0.
Anforderungen an VxWorks-Images
Qt für VxWorks erfordert, dass bestimmte VxWorks-Image-Bundles und -Komponenten in die Basissoftware eingebettet werden, damit Qt kompiliert werden kann und ordnungsgemäß funktioniert. Die Liste ist keineswegs vollständig, da sie von den Hardware-, Software- und Systemanforderungen Ihres Projekts abhängt. Die folgende Tabelle enthält jedoch diejenigen Komponenten, die für die Funktion bestimmter Funktionen (einschließlich Touchscreen-Unterstützung) zwingend erforderlich sind. Beachten Sie außerdem, dass sich diese je nach VxWorks-Version ändern können.
Beispiel für eine VSB-Konfiguration für die BSPs „fsl_imx6“ und „itl_generic“
Sie müssen die folgenden Funktionen zum VSB hinzufügen, damit Qt ordnungsgemäß funktioniert. Weitere Details finden Sie in der Wind River VxWorks-Dokumentation.
| Funktion | Anmerkungen |
|---|---|
DSI_DSI_KERNEL | Nicht zutreffend |
IPNET_COREIP | Nicht zutreffend |
IPNET_DHCPC | Nicht zutreffend |
SDMMC_DEVICE | Nicht zutreffend |
SDMMC_HOST | Nicht zutreffend |
SDMMC_SDHC | Nicht zutreffend |
SDMMC_STORAGE | Nicht zutreffend |
SERVICE_UN | Nicht zutreffend |
SOCKET | Nicht zutreffend |
USB_EHCI | Nicht zutreffend |
USB_KEYBOARD | Nicht zutreffend |
USB_MOUSE | Nicht zutreffend |
USB_STORAGE | Nicht zutreffend |
USB_TOUCHSCREEN | Nicht zutreffend |
EVDEV | Nicht zutreffend |
EVDEV_LIB | Nicht zutreffend |
EVDEV_TI_TSC2004_TS | Nicht zutreffend |
EVDEV_EETI_EXC7200_TS | Nicht zutreffend |
AUDIO | Nicht zutreffend |
GPUDEV_FSLVIVGPU | fsl_imx6-spezifisch |
HASH | Nicht zutreffend |
OPENSSL | Nicht zutreffend |
RANDOM_ENTROPY_INJECT | Nicht zutreffend |
IPNET_SSH | Nicht zutreffend |
USER_MANAGEMENT | Nicht zutreffend |
ICU | Nicht zutreffend |
DRM | itl_generic spezifisch |
ITLI915 | itl_generic spezifisch |
LIBDRM | itl_generic-spezifisch |
MESA | itl_generic und nxp_imx8 spezifisch |
Die folgenden Konfigurationsvariablen werden implizit hinzugefügt und müssen von Ihnen entfernt werden:
| Variable | Hinweise |
|---|---|
_WRS_CONFIG_EVDEV_OPTIMIZED_MODE | Nicht zutreffend |
_WRS_CONFIG_EVDEV_DISPLAY_POINT_TRANSLATE | Nicht zutreffend |
_WRS_CONFIG_MESA_MANGLE | itl_generic spezifisch |
Sie müssen die folgenden Variablen zur Konfiguration hinzufügen:
| Variable | Wert | Anmerkungen |
|---|---|---|
_WRS_CONFIG_RTP_SSP | y | Nicht zutreffend |
_WRS_CONFIG_RTP_STACK_PROTECTOR | y | Nicht zutreffend |
_WRS_CONFIG_MESA_GPUDEV_INTEL_GEN90 | y | itl_generic-spezifisch |
_WRS_CONFIG_EVDEV_COMPATIBLE_MODE | y | Wird benötigt, damit Qt ordnungsgemäß mit einem Touchscreen funktioniert. |
Beispiel für eine VIP-Konfiguration für die BSPs „fsl_imx6“ und „itl_generic“
Weitere Informationen finden Sie in der WindRiver VxWorks-Dokumentation.
| Bundle | Hinweise |
|---|---|
BUNDLE_POSIX | Dieses Bundle ist für die Kompatibilität mit POSIX-bezogenen Funktionen erforderlich, die Qt benötigt. |
BUNDLE_RTP_DEPLOY | Nicht zutreffend |
BUNDLE_RTP_DEVELOP | Nicht zutreffend |
BUNDLE_STANDALONE_SHELL | Nicht zutreffend |
| Komponente | Hinweise |
|---|---|
INCLUDE_TMP_DIR INCLUDE_RAM_DISK_FORMAT_HRFS | Die Einbindung dieser beiden Komponenten ist erforderlich, wenn Sie „ QTemporaryFile “ nutzen möchten. Beachten Sie, dass Sie außerdem in Betracht ziehen sollten, „ TMP_DIR_SIZE “ auf einen geeigneten Wert zu setzen |
DRV_AUDIO_FSL_SSI | Nicht zutreffend |
DRV_AUDIO_FSL_SGTL5000 | Nicht zutreffend |
DRV_FSL_SDHC_CTRL | Nicht zutreffend |
DRV_IMX_SDHC_CTRL | Nicht zutreffend |
INCLUDE_EHCI_INIT | Nicht zutreffend |
INCLUDE_FSL_IMX6Q_SABRELITE | Nicht zutreffend |
DRV_MMCSTORAGE_CARD | Nicht zutreffend |
DRV_SDSTORAGE_CARD | Nicht zutreffend |
INCLUDE_AUDIO_LIB_CORE | Nicht zutreffend |
INCLUDE_AUDIO_LIB_WAV | Nicht zutreffend |
INCLUDE_CUSTOM_ENTROPY_ADD | Nicht zutreffend |
INCLUDE_DEBUG_AGENT_START | Nicht zutreffend |
INCLUDE_DEFAULT_TIMEZONE | Nicht zutreffend |
INCLUDE_DISK_UTIL | Nicht zutreffend |
INCLUDE_DOSFS | Nicht zutreffend |
INCLUDE_DSAPARAM_CMD | Nicht zutreffend |
INCLUDE_END | Nicht zutreffend |
INCLUDE_EVDEV_LIB_CORE | Nicht zutreffend |
INCLUDE_EVDEV_LIB_KBD | Nicht zutreffend |
INCLUDE_EVDEV_LIB_KBD_MAP_US | Nicht zutreffend |
INCLUDE_EVDEV_LIB_PTR | Nicht zutreffend |
INCLUDE_EVDEV_LIB_TS | Nicht zutreffend |
INCLUDE_GENDSA_CMD | Nicht zutreffend |
INCLUDE_GENRSA_CMD | Nicht zutreffend |
INCLUDE_GETADDRINFO | Nicht zutreffend |
INCLUDE_GETNAMEINFO | Nicht zutreffend |
INCLUDE_HRFS | Nicht zutreffend |
INCLUDE_HRFS_ACCESS_TIMESTAMP | Nicht zutreffend |
INCLUDE_HRFS_FORMAT | Nicht zutreffend |
INCLUDE_HRFS_HISPEED_WRITE_MODE | Nicht zutreffend |
INCLUDE_IFCONFIG | Nicht zutreffend |
INCLUDE_IO_REALPATH | Diese Komponente wird benötigt, um die Verwendung der Funktion „realpath“ zu ermöglichen, die für QFileInfo |
INCLUDE_IPATTACH | Nicht zutreffend |
INCLUDE_IPCOM_SYSLOGD_CMD | Nicht zutreffend |
INCLUDE_IPCOM_SYSVAR_CMD | Nicht zutreffend |
INCLUDE_IPCOM_USE_RAM_DISK | Nicht zutreffend |
INCLUDE_IPCOM_USE_TIME_CMD | Nicht zutreffend |
INCLUDE_IPDHCPC | Nicht zutreffend |
INCLUDE_IPDNSC | Nicht zutreffend |
INCLUDE_IPD_CMD | Nicht zutreffend |
INCLUDE_IPFTPC | Nicht zutreffend |
INCLUDE_IPFTP_CMD | Nicht zutreffend |
INCLUDE_IPIFCONFIG_CMD | Nicht zutreffend |
INCLUDE_IPNETSTAT_CMD | Nicht zutreffend |
INCLUDE_IPNSLOOKUP_CMD | Nicht zutreffend |
INCLUDE_IPPING_CMD | Nicht zutreffend |
INCLUDE_IPROUTE_CMD | Nicht zutreffend |
INCLUDE_IPTRACE_ROUTE_CMD | Nicht zutreffend |
INCLUDE_IPWRAP_GETHOSTBYADDR | Nicht zutreffend |
INCLUDE_IPWRAP_GETHOSTBYNAME | Nicht zutreffend |
INCLUDE_IPWRAP_GETNAMEINFO | Nicht zutreffend |
INCLUDE_IPWRAP_IFNAME | Nicht zutreffend |
INCLUDE_IPWRAP_ROUTECMD | Nicht zutreffend |
INCLUDE_MMAP | Nicht zutreffend |
INCLUDE_PING | Nicht zutreffend |
INCLUDE_PIPES | Nicht zutreffend |
INCLUDE_POSIX_MAPPED_FILES | Nicht zutreffend |
INCLUDE_POSIX_PIPES | Nicht zutreffend |
INCLUDE_POSIX_PTHREAD_SCHEDULER | Nicht zutreffend |
INCLUDE_POSIX_SHM | Nicht zutreffend |
INCLUDE_RAM_DISK | Nicht zutreffend |
INCLUDE_RAM_DISK_FORMAT_HRFS | Nicht zutreffend |
INCLUDE_RANDOM_NUM_GEN | Nicht zutreffend |
INCLUDE_ROMFS | Nicht zutreffend |
INCLUDE_ROUTECMD | Nicht zutreffend |
INCLUDE_SC_PIPE | Nicht zutreffend |
INCLUDE_SC_POSIX_PIPE | Nicht zutreffend |
INCLUDE_SD_BUS | Nicht zutreffend |
INCLUDE_SECURITY | Nicht zutreffend |
INCLUDE_SEC_KEY_STORE_CMD | Nicht zutreffend |
INCLUDE_SHELL | Nicht zutreffend |
INCLUDE_SSH | Nicht zutreffend |
INCLUDE_STANDALONE_SYM_TBL | Nicht zutreffend |
INCLUDE_STARTUP_SCRIPT | Nicht zutreffend |
INCLUDE_TMP_DIR | Nicht zutreffend |
INCLUDE_UN_COMP | Nicht zutreffend |
INCLUDE_USB_GEN2_KEYBOARD | Nicht zutreffend |
INCLUDE_USB_GEN2_MOUSE | Nicht zutreffend |
INCLUDE_USB_GEN2_STORAGE_INIT | Nicht zutreffend |
INCLUDE_USB_TOUCH_SCREEN | Nicht zutreffend |
INCLUDE_USB_TOUCH_SCREEN_INIT | Nicht zutreffend |
INCLUDE_USER_DATABASE | Nicht zutreffend |
INCLUDE_USER_IDENTIFICATION | Nicht zutreffend |
INCLUDE_VRFS | Nicht zutreffend |
INCLUDE_VXBUS_SHOW | Nicht zutreffend |
DRV_TOUCH_SCREEN_TI_TSC2004 | Nicht zutreffend |
DRV_TOUCH_SCREEN_EETI_EXC7200 | Nicht zutreffend |
INCLUDE_FBDEV_FSLIPU_0 | fsl_imx6-spezifisch |
INCLUDE_FBDEV_SPLASH | Nicht zutreffend |
INCLUDE_GPUDEV_FSLVIV_API | fsl_imx6-spezifisch |
INCLUDE_GPUDEV_FSLVIV_API_INIT | fsl_imx6-spezifisch |
INCLUDE_GPUDEV_ITLGMC_2 | itl_generic-spezifisch |
INCLUDE_I915 | itl_generic-spezifisch |
INCLUDE_MESA_FBDEV | itl_generic-spezifisch |
INCLUDE_MESA_GPUDEV_DRI | itl_generic-spezifisch |
INCLUDE_MESA_GPUDEV_DRI_I965 | itl_generic-spezifisch |
Die folgenden Komponenten werden implizit hinzugefügt und müssen von Ihnen entfernt werden:
| Ebene | Hinweise |
|---|---|
INCLUDE_FTP | Nicht zutreffend |
INCLUDE_SHELL_SECURITY | Nicht zutreffend |
VIP-Parameter
Damit Qt unter VxWorks ordnungsgemäß läuft, müssen Sie die folgenden Parameter hinzufügen:
| Parameter | Beispielwert | Hinweise |
|---|---|---|
SEC_VAULT_KEY_ENCRYPTING_PW | '"vxTarget"' | Nicht zutreffend |
UDB_STORAGE_PATH | '"/ram/vxUserDB.txt"' | Nicht zutreffend |
UDB_HASH_KEY | '"123456789"' | Nicht zutreffend |
UDB_HASH_KEY_LEN | 9 | Beispielwert, siehe oben |
FSLVIV_RTP_COMMAND_BUFFER_QUEUE | 32 | Für die „arm“-Architektur |
SYS_CLK_RATE | 100 | Nicht zutreffend |
RTP_PTHREAD_STACK_SIZE_DEFAULT | 262144 | Erforderlich, damit die qtquick3d-Beispiele funktionieren. Kann mit der Umgebungsvariablen PTHREAD_STACK_SIZE_DEFAULT überschrieben werden. |
TMP_DIR_SIZE | 614400 | Mindestwert für das Bestehen der Qt-internen Tests |
NUM_FILES | 300 | Nicht zutreffend |
RTP_FD_NUM_MAX | 300 | Nicht zutreffend |
HRFS_DEFAULT_MAX_FILES | 300 | Nicht zutreffend |
ITLGMC_FBDEV_RESOLUTION_2 | '"1024x768-32"' | Beispielwert für den über HDMI angeschlossenen Xenarc 706TSA-Touchscreen. |
RTP_MEM_FILL | True | Standardmäßig lautet der Wert „ True “ und muss auf „ True “ gesetzt bleiben, damit Qt ordnungsgemäß funktioniert. |
Qt 6 für VxWorks kompilieren
Host-Build
Für die Cross-Kompilierung von Qt muss eine Host-Version von Qt verfügbar sein. Der Grund dafür ist, dass während des Kompiliervorgangs bestimmte Tools (wie z. B. moc, rcc, qmlcachegen und qsb) aus der Host-Version aufgerufen werden. Sie haben folgende Möglichkeiten:
- Qt-Quellcode für den Hostkompilieren,
- Installieren des Host-Builds mit Qt Online Installer.
Es ist jedoch ratsam, sicherzustellen, dass Sie Qt auch auf dem Host für das Desktop-Ziel kompilieren können, da dieselben Werkzeuge auch beim Kompilieren für VxWorks benötigt werden.
Ausführen des Configure-Skripts
Die Befehle zum Konfigurieren, Kompilieren und Installieren von Qt 6 für den Host lauten wie folgt:
./configure \
-cmake-generator "Ninja" \
-extprefix <path/to/Qt6/host/installation/dir> \
-submodules qtbase,qtdeclarative,qtquick3d,qtshadertools \
-nomake tests \
-nomake examples \
-- \
-B <host/build/directory>
cd <host/build/directory>
cmake --build . --parallel
cmake --install .Diese Befehle installieren Qt 6 für den Host unter „ <path_to_Qt 6_host_installation_dir> “.
Kompilieren von Qt 6 für das Zielsystem
Einrichten der Build-Umgebung
Bevor Sie „configure“ ausführen und Qt 6 kompilieren, müssen Sie die VxWorks Development Shell in der Eingabeaufforderung öffnen.
- Linux:
cd <VxWorks installation directory> ./wrenv.sh -p vxworks export WIND_CC_SYSROOT=<path to VxWorks VSB directory> - Windows:
cd <VxWorks installation directory> wrenv -p vxworks export WIND_CC_SYSROOT=<path to VxWorks VSB directory>
Vorbereitung der benutzerdefinierten CMake-Toolchain-Datei
Um Grafikbibliotheken aus dem BSP einzubinden, müssen Sie zunächst eine CMake-Toolchain-Datei erstellen. Ein Beispiel für eine CMake-Toolchain-Datei für das Gerät BD-SL-i.MX6:
# Copyright (C) 2024 The Qt Company Ltd.
if(QT_VXWORKS_TOOLCHAIN_FILE)
set(_original_toolchain_file "${QT_VXWORKS_TOOLCHAIN_FILE}")
elseif(DEFINED ENV{QT_VXWORKS_TOOLCHAIN_FILE})
set(_original_toolchain_file "$ENV{QT_VXWORKS_TOOLCHAIN_FILE}")
else()
message(FATAL_ERROR "QT_VXWORKS_TOOLCHAIN_FILE is not set.")
endif()
if(NOT EXISTS "${_original_toolchain_file}")
message(FATAL_ERORR "${_original_toolchain_file} doesn't exists.")
endif()
include("${_original_toolchain_file}")
unset(_original_toolchain_file)
list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES QT_VXWORKS_TOOLCHAIN_FILE)
set(_common_lib_path "${CMAKE_SYSROOT}/usr/lib/common")
set(EGL_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/h/public CACHE PATH "Path to EGL include directory" FORCE)
set(EGL_LIBRARY ${_common_lib_path}/libgfxFslVivEGL.so CACHE PATH "Path to EGL lib" FORCE)
set(GLESv2_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/h/public CACHE PATH "Path to GLES include directory" FORCE)
set(GLESv2_LIBRARY ${_common_lib_path}/libgfxFslVivGLESv2.so CACHE PATH "Path to GLES lib" FORCE)
set(VxWorksPlatformGraphics_DEFINES "-D_FSLVIV")
set(VxWorksPlatformGraphics_LIBRARIES_PACK
"${_common_lib_path}/libgfxFslVivEGL.so"
"${_common_lib_path}/libgfxFslVivGLESv2.so"
"${_common_lib_path}/libgfxFslVivGAL.so"
"${_common_lib_path}/libgfxFslVivGLSLC.so"
"${_common_lib_path}/libgfxFslVivVDK.so"
"${_common_lib_path}/libxml.so"
)
set(VxWorksPlatformGraphics_REQUIRED_LIBRARIES
${VxWorksPlatformGraphics_LIBRARIES_PACK}
${EGL_LIBRARY}
${GLESv2_LIBRARY}
)
unset(_common_lib_path)Ein Beispiel für den Intel NUC6i3SYH:
# Copyright (C) 2024 The Qt Company Ltd.
if(QT_VXWORKS_TOOLCHAIN_FILE)
set(_original_toolchain_file "${QT_VXWORKS_TOOLCHAIN_FILE}")
elseif(DEFINED ENV{QT_VXWORKS_TOOLCHAIN_FILE})
set(_original_toolchain_file "$ENV{QT_VXWORKS_TOOLCHAIN_FILE}")
else()
message(FATAL_ERROR "QT_VXWORKS_TOOLCHAIN_FILE is not set.")
endif()
if(NOT EXISTS "${_original_toolchain_file}")
message(FATAL_ERORR "${_original_toolchain_file} doesn't exists.")
endif()
include("${_original_toolchain_file}")
unset(_original_toolchain_file)
list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES QT_VXWORKS_TOOLCHAIN_FILE)
set(_common_lib_path "${CMAKE_SYSROOT}/usr/lib/common")
set(EGL_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/h/public CACHE PATH "Path to EGL include directory" FORCE)
set(EGL_LIBRARY ${_common_lib_path}/libgfxMesaEGL.so CACHE PATH "Path to EGL lib" FORCE)
set(GLESv2_INCLUDE_DIR ${CMAKE_SYSROOT}/usr/h/public CACHE PATH "Path to GLES include directory" FORCE)
set(GLESv2_LIBRARY ${_common_lib_path}/libgfxMesaGL.so CACHE PATH "Path to GLES lib" FORCE)
set(VxWorksPlatformGraphics_DEFINES "-D__vxworks -D__VXWORKS")
set(VxWorksPlatformGraphics_LIBRARIES_PACK
"${_common_lib_path}/libgfxMesaEGL.so"
"${_common_lib_path}/libgfxMesaGL.so"
"${_common_lib_path}/libgfxMesaSw.so"
"${_common_lib_path}/libgfxMesa.so"
"${_common_lib_path}/libgfxMesaDriI965.so"
"${_common_lib_path}/libgfxLibDRM.so"
"${_common_lib_path}/libxml.so"
)
set(VxWorksPlatformGraphics_REQUIRED_LIBRARIES
${VxWorksPlatformGraphics_LIBRARIES_PACK}
${EGL_LIBRARY}
${GLESv2_LIBRARY}
)
unset(_common_lib_path)Ausführen von „qt 6 configure“ für das Ziel
Nachfolgend finden Sie ein Beispiel für eine Build-Konfiguration für das BD-SL-i.MX6. Bei den meisten VxWorks-Boards sieht der „configure“-Befehl sehr ähnlich aus. Standardmäßig ist Qt 6 für die Verwendung von gemeinsam genutzten Bibliotheken konfiguriert. Um Qt 6 statisch zu kompilieren, fügen Sie die Option „ -static “ zu „configure“ hinzu.
Stellen Sie sicher, dass die Umgebungsvariable {WIND_CC_SYSROOT} auf das VxWorks-VSB-Stammverzeichnis gesetzt ist.
./configure \
-cmake-generator "Ninja" \
-icu \
-eglfs \
-qpa eglfs \
-submodules "qtbase,qtdeclarative,qtmultimedia,qtquick3d,qtgraphs,qtimageformats,qtsvg,qtshadertools,qtvirtualkeyboard" \
-- \
-B <target/build/directory> \
-DQT_VXWORKS_TOOLCHAIN_FILE=<path/to/VSB/mk/toolchain.cmake> \
-DFEATURE_vulkan=OFF \
-DQT_QMAKE_TARGET_MKSPEC=vxworks-clang \
-DQT_HOST_PATH=<path/to/Qt6/host/installation/dir> \
-DCMAKE_STAGING_PREFIX:PATH=<path/to/Qt6/target/installation/dir> \
-DCMAKE_TOOLCHAIN_FILE=<path/to/cmake/for/graphics/file/created/above> \Es wird empfohlen, Qt 6 mithilfe eines Shadow-Builds zu erstellen. Weitere Informationen finden Sie unter „Qt-Konfigurationsoptionen “.
Warnung: Wenn VxWorks mit „ RTP_MEM_FILL “ als „false“ konfiguriert ist, benötigt der Qt-Konfigurationsbefehl ein zusätzliches Argument „ -DCMAKE_CXX_FLAGS="-DQT_RTP_MEM_FILL=1" “.
Nach der Konfiguration erstellen und installieren Sie Qt 6 für VxWorks mit folgenden Befehlen:
cd <host build directory>
cmake --build . --parallel
cmake --install .Plattform-Plugins für VxWorks-Geräte
Qt für VxWorks unterstützt das EGLFS-Plattform-Plugin für eine native Fensterersetzung. Weitere Informationen zur Konfiguration finden Sie unter „EGLFS“.
Erstellen von Qt-Anwendungen
Um eine Qt-Anwendung zu erstellen, müssen Sie die Umgebungsvariable `QT_VXWORKS_TOOLCHAIN_FILE` setzen oder als Makro definieren.
Ein Beispiel zum Erstellen der Qt-Demo „Clocks“:
export WIND_CC_SYSROOT=<path/to/VxWorks/VSB/directory>
export QT_VXWORKS_TOOLCHAIN_FILE=<path/to/the/BSP/toolchain.cmake>
<path/to/Qt6/target/installation/dir>/bin/qt-cmake -G Ninja -S ~/Qt/Examples/Qt-6.10.0/demos/clocks -B <path/to/build/directory>
cd <path/to/build/directory>
cmake --build . --parallelUmgebungsvariablen setzen
| Variable | Beschreibung |
|---|---|
| QT_QPA_FONTDIR | Pfad zu den Schriftarten. |
| QT_QPA_EGLFS_FB | Pfad zum Framebuffer-Gerät. |
| LD_LIBRARY_PATH | Pfad zu den dynamischen Bibliotheken. |
| ICU_DATA | Pfad zu den ICU-Daten. |
| QT_QPA_EGLFS_INTEGRATION | Eglfs-Integration, eglfs_viv oder eglfs_kms. |
| QT_QPA_EGLFS_KMS_CONFIG | Pfad zu kms.conf. |
Hinweis: DerQML -Festplatten-Cache funktioniert nicht; deaktivieren Sie ihn mit der folgenden Variablen, um eine Verlangsamung beim Start zu vermeiden: QML_DISABLE_DISK_CACHE.
Legen Sie die Umgebungsvariablen beispielsweise wie folgt in einem Startskript fest:
putgenv("QT_QPA_FONTDIR=/bd0a/fonts")
putgenv("QT_QPA_EGLFS_FB=/dev/fb0")
putgenv("LD_LIBRARY_PATH=/bd0a/lib/gfx;/bd0a/lib/llvm;/bd0a/lib/icu")
putgenv("ICU_DATA=/bd0a/icu/icudt73l.dat")
putgenv("QT_QPA_EGLFS_INTEGRATION=eglfs_kms")
putgenv("QT_QPA_EGLFS_FB=/dev/fb0")
putgenv("QT_QPA_EGLFS_KMS_CONFIG=/bd0a/kms.conf")
putgenv("QML_DISABLE_DISK_CACHE=1")Die Datei „ kms.conf “ für das Intel KabyLake-Gerät könnte beispielsweise wie folgt aussehen:
{
"device": "/dev/dri/card0",
"hwcursor": false,
"pbuffers": true,
"outputs": [
{
"name": "DP",
"mode": "1920x1080"
}
]
}Ausführen von Qt-Anwendungen
Das folgende Beispiel zeigt, wie eine Anwendung mit dem VxWorks-Befehl „ rtpSp “ gestartet wird:
rtpSp("<Qt 6 VxWorks application>", 200, 0x100000, 0, 0x01000000)Debuggen von Qt-Anwendungen
Um Qt-Anwendungen zu debuggen, müssen Sie Folgendes zu Ihrer VxWorks-VSB hinzufügen:
vxprj vsb config -s -add "_WRS_CONFIG_TCF_GDB_RSP=y"Fügen Sie Ihrer VxWorks-VIP-Konfiguration Folgendes hinzu:
"INCLUDE_DEBUG_AGENT"
"INCLUDE_DEBUG_AGENT_START"
"INCLUDE_STANDALONE_SYM_TBL"Über die Befehlszeile
- Starten Sie die zu debuggende Anwendung auf dem Gerät über SSH oder die serielle USB-Verbindung:
rtpSp("<Qt 6 VxWorks application>", 200, 0x100000, 0, 0x01000000) - Starten Sie den VxWorks-Debugger auf dem PC:
vxgdb <binary to debug> - Listen Sie die laufenden Prozesse im Debugger auf:
monitor ps - Verbinden Sie den Debugger mit der bereits laufenden Anwendung:
"attach <id from monitor>" - Verwenden Sie GDB-Befehle zum Debuggen.
Aus Qt Creator
Informationen zum Debuggen mit „ Qt Creator “ finden Sie unter Qt Creator: Debuggen von C++-Anwendungen auf VxWorks-Geräten.
Aus der Workbench
- Erstellen Sie ein CMake-Real-Time-Process-Projekt.

- Legen Sie das VSB fest, für das die Debugging-Konfiguration vorgenommen wurde.
- Entfernen Sie „set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")“ aus der Datei „CMakeLists.txt“.
- Fügen Sie Qt-CMake-bezogenen Code gemäß „Erste Schritte mit CMake“ zur „CMakeLists.txt“ hinzu.
- Fügen Sie vor „
project()“ die Zeile „unset(CMAKE_TOOLCHAIN_FILE CACHE)“ ein und fügen Sie „CMAKE_TOOLCHAIN_FILE“ hinzu, wobei Sie auf die Qt6-Toolchain-Datei verweisen, sowie „QT_CHAINLOAD_TOOLCHAIN_FILE“ auf die VSB-Toolchain-Datei. Beispiel:unset(CMAKE_TOOLCHAIN_FILE CACHE) set(CMAKE_TOOLCHAIN_FILE "/home/qtuser/VxWorks/qt/target_gdb/lib/cmake/Qt6/qt.toolchain.cmake") set(QT_CHAINLOAD_TOOLCHAIN_FILE "/home/qtuser/VxWorks/fsl_imx6_2_0_6_2_VSB_gdb/mk/toolchain.cmake") - Erstellen Sie das Anwendungsprojekt.
- Erstellen Sie eine neue Verbindung.

- Starten Sie den RTP-Prozess zum Debuggen.

- Klicken Sie auf „Erweiterte Optionen“.

- Stellen Sie die Stackgröße auf 0x100000 ein.

Qt-Eingabe-Plugins für VxWorks
VxWorks verwendet eine eigene Implementierung von „ libevdev “, deren API der von Linux sehr ähnlich ist, sich jedoch in den Funktionen unterscheidet. Aus diesem Grund implementiert Qt für VxWorks separate Eingabe-Plugins zur Steuerung von Maus, Tastatur und Touchscreen, die auf {inputs-linux-device.html}{Linux evdev} basieren, wobei die Unterschiede im Folgenden erläutert werden.
VxMouse
VxMouse verwendet dasselbe Konfigurationsschema wie EvdevMouse, mit Ausnahme einer anderen Umgebungsvariablen: „ QT_QPA_VXEVDEV_MOUSE_PARAMETERS “. Zudem ignoriert „ VxMouse “ die Parameter „ nocompress “, „ dejitter “ und „ grab “.
VxKeyboard
VxKeyboard verwendet dasselbe Konfigurationsschema wie EvdevKeyboard, mit Ausnahme der Umgebungsvariable: QT_QPA_VXEVDEV_KEYBOARD_PARAMETERS.
VxTouch
VxTouch verwendet dasselbe Konfigurationsschema wie EvdevTouch, mit Ausnahme folgender Umgebungsvariablen:
QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERSQT_QPA_VXEVDEV_DEBUG
Zusätzlich fügt VxTouch zwei neue Parameter hinzu:
| Parameter | Beschreibung |
|---|---|
rangex=MIN_X,MAX_X | Überschreibt den minimalen und maximalen Berührungspunkt für die X-Achse |
rangey=MIN_Y,MAX_Y | Überschreibt die Mindest- und Höchstwerte für den Berührungspunkt auf der Y-Achse |
Einschränkungen
Grafikspeicher
Bei Systemen mit einer festen Menge an dediziertem Grafikspeicher ist möglicherweise besondere Vorsicht geboten, bevor Qt-Anwendungen ausgeführt werden, die auf Qt Quick oder Klassen wie QOpenGLWidget basieren. Die Standardeinstellung könnte für solche Anwendungen unzureichend sein, insbesondere wenn sie auf einem Bildschirm mit hoher Auflösung (z. B. Full HD) angezeigt werden. In diesem Fall können unerwartete Fehlfunktionen auftreten. Es wird daher empfohlen, sicherzustellen, dass mindestens 128 MB GPU-Speicher verfügbar sind. Bei Systemen, bei denen keine feste Speichermenge für die GPU reserviert ist, stellt dies kein Problem dar.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.