Qt für VxWorks
Kontaktieren Sie The Qt Company für weitere Informationen: https://www.qt.io/contact-us/
Qt für VxWorks-Lizenzierung
Qt für 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.9 ist auf VxWorks 24.03 verifiziert.
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 späteren 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, und zusätzlich die folgenden:
- GPU-Gerät (GPUDEV) für OpenGL ES 2.0
Unterstützte Module
Die meisten wesentlichen Qt-Module und einige Zusatzmodule werden unterstützt.
Unterstützte wesentliche Module
Qt-Modul | Hinweise |
---|---|
Qt Core | Keine Unterstützung für QProcess. QLocalSocket und QLocalServer unterstützen nur SOCK_SEQPACKET. |
Qt GUI | Nicht anwendbar |
Qt Network | Nicht zutreffend |
Qt Qml | Nicht zutreffend |
Qt Quick | Nicht zutreffend |
Qt Quick Controls | Nicht zutreffend |
Qt Quick Dialogs | Nicht anwendbar |
Qt Quick Layouts | Nicht anwendbar |
Qt Quick Test | Nicht anwendbar |
Qt Test | Nicht anwendbar |
Qt Widgets | Nicht anwendbar |
Unterstützte Add-Ons
Hinweis: Sie können nicht unterstützte oder nicht verwendete Module explizit vom Build ausschließen, indem Sie die Option -skip <module> beim Ausführen des configure-Tools verwenden.
Plattform-Hinweise
Qt ist für die Verwendung durch RTP-Anwendungen vorbereitet, es gibt keine Unterstützung für DKM.
Mit der Veröffentlichung von Qt 5.0 enthält Qt keine eigene Implementierung des Fenstersystems mehr: QWS ist keine unterstützte Plattform mehr. Für Single-Process-Anwendungen ist die Qt Platform Abstraction eine bessere Lösung.
Es gibt ein Plugin, das auf VxWorks verwendbar ist: EGLFS. Die Verfügbarkeit dieses Plugins hängt von der Konfiguration von Qt ab.
Konfigurieren für ein bestimmtes Gerät
Bereiten Sie Ihre Umgebung vor, indem Sie das VxWorks SDK installieren und eine WindRiver-Lizenz erwerben, die vom Installationsprogramm und für die Erstellung von VxWorks-Images benötigt wird. Suchen Sie nach dem entsprechenden Installationsprogramm unter {https://gallery.windriver.com/portal/products}.
Die Erstellung von Qt für ein bestimmtes Gerät erfordert eine Qt 6-Installation für den Kompilierungshost, eine Toolchain und eine Sysroot. Zusätzlich benötigen einige Geräte herstellerspezifischen Anpassungscode für EGL und OpenGL 2.0 Unterstützung.
VxWorks Image Anforderungen
Qt für VxWorks erfordert bestimmte VxWorks-Image-Bundles und -Komponenten, die in die Basissoftware eingebettet werden müssen, damit Qt kompiliert 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, die für das Funktionieren bestimmter Funktionen (einschließlich Touchscreen-Unterstützung) zwingend erforderlich sind. Beachten Sie auch, dass sich diese mit den verschiedenen VxWorks-Versionen ändern können.
Beispiel einer VSB-Konfiguration für die BSPs fsl_imx6 und itl_generic
Sie müssen die folgenden Features zu VSB hinzufügen, damit Qt richtig funktioniert. Für weitere Details lesen Sie bitte die WindRiver VxWorks Dokumentation.
Merkmal | Hinweise |
---|---|
DSI_DSI_KERNEL | Nicht zutreffend |
IPNET_COREIP | Nicht zutreffend |
IPNET_DHCPC | Nicht anwendbar |
SDMMC_DEVICE | Nicht zutreffend |
SDMMC_HOST | Nicht anwendbar |
SDMMC_SDHC | Nicht anwendbar |
SDMMC_STORAGE | Nicht anwendbar |
SERVICE_UN | Nicht anwendbar |
SOCKET | Nicht anwendbar |
USB_EHCI | Nicht anwendbar |
USB_KEYBOARD | Nicht anwendbar |
USB_MOUSE | Nicht anwendbar |
USB_STORAGE | Nicht anwendbar |
USB_TOUCHSCREEN | Nicht anwendbar |
EVDEV | Nicht anwendbar |
EVDEV_LIB | Nicht anwendbar |
EVDEV_TI_TSC2004_TS | Nicht anwendbar |
EVDEV_EETI_EXC7200_TS | Nicht anwendbar |
AUDIO | Nicht anwendbar |
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 anwendbar |
DRM | itl_generisch spezifisch |
ITLI915 | itl_generisch spezifisch |
LIBDRM | itl_generisch spezifisch |
MESA | itl_generisch spezifisch |
Die folgenden Konfigurationsvariablen werden implizit hinzugefügt und Sie müssen sie entfernen:
Variable | Anmerkungen |
---|---|
_WRS_CONFIG_EVDEV_OPTIMIZED_MODE | Nicht zutreffend |
_WRS_CONFIG_EVDEV_DISPLAY_POINT_TRANSLATE | Nicht zutreffend |
_WRS_CONFIG_MESA_MANGLE | itl_generisch spezifisch |
Sie müssen die folgenden Variablen in der Konfiguration hinzufügen:
Variable | Wert | Hinweise |
---|---|---|
_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 richtig mit einem Touchscreen funktioniert. |
Beispiel VIP Konfiguration für fsl_imx6 und itl_generic BSPs
Für weitere Details lesen Sie bitte die WindRiver VxWorks Dokumentation.
Bündel | Hinweise |
---|---|
BUNDLE_POSIX | Dieses Bundle ist notwendig für die Kompatibilität mit POSIX-bezogenen Funktionalitäten, die Qt benötigt. |
BUNDLE_RTP_DEPLOY | Nicht zutreffend |
BUNDLE_RTP_DEVELOP | Nicht zutreffend |
BUNDLE_STANDALONE_SHELL | Nicht zutreffend |
Komponente | Anmerkungen |
---|---|
INCLUDE_TMP_DIR INCLUDE_RAM_DISK_FORMAT_HRFS | Die Einbeziehung dieser beiden Komponenten ist notwendig, wenn Sie QTemporaryFile verwenden wollen. Beachten Sie, dass Sie auch TMP_DIR_SIZE auf einen geeigneten Wert setzen sollten. |
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 anwendbar |
DRV_MMCSTORAGE_CARD | Nicht anwendbar |
DRV_SDSTORAGE_CARD | Nicht anwendbar |
INCLUDE_AUDIO_LIB_CORE | Nicht anwendbar |
INCLUDE_AUDIO_LIB_WAV | Nicht anwendbar |
INCLUDE_CUSTOM_ENTROPY_ADD | Nicht anwendbar |
INCLUDE_DEBUG_AGENT_START | Nicht anwendbar |
INCLUDE_DEFAULT_TIMEZONE | Nicht anwendbar |
INCLUDE_DISK_UTIL | Nicht anwendbar |
INCLUDE_DOSFS | Nicht anwendbar |
INCLUDE_DSAPARAM_CMD | Nicht anwendbar |
INCLUDE_END | Nicht anwendbar |
INCLUDE_EVDEV_LIB_CORE | Nicht anwendbar |
INCLUDE_EVDEV_LIB_KBD | Nicht anwendbar |
INCLUDE_EVDEV_LIB_KBD_MAP_US | Nicht anwendbar |
INCLUDE_EVDEV_LIB_PTR | Nicht anwendbar |
INCLUDE_EVDEV_LIB_TS | Nicht anwendbar |
INCLUDE_GENDSA_CMD | Nicht anwendbar |
INCLUDE_GENRSA_CMD | Nicht anwendbar |
INCLUDE_GETADDRINFO | Nicht anwendbar |
INCLUDE_GETNAMEINFO | Nicht anwendbar |
INCLUDE_HRFS | Nicht anwendbar |
INCLUDE_HRFS_ACCESS_TIMESTAMP | Nicht anwendbar |
INCLUDE_HRFS_FORMAT | Nicht anwendbar |
INCLUDE_HRFS_HISPEED_WRITE_MODE | Nicht anwendbar |
INCLUDE_IFCONFIG | Nicht zutreffend |
INCLUDE_IO_REALPATH | Diese Komponente wird benötigt, um die Verwendung der Realpath-Funktion 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 anwendbar |
INCLUDE_IPDNSC | Nicht anwendbar |
INCLUDE_IPD_CMD | Nicht anwendbar |
INCLUDE_IPFTPC | Nicht anwendbar |
INCLUDE_IPFTP_CMD | Nicht anwendbar |
INCLUDE_IPIFCONFIG_CMD | Nicht anwendbar |
INCLUDE_IPNETSTAT_CMD | Nicht anwendbar |
INCLUDE_IPNSLOOKUP_CMD | Nicht anwendbar |
INCLUDE_IPPING_CMD | Nicht anwendbar |
INCLUDE_IPROUTE_CMD | Nicht anwendbar |
INCLUDE_IPTRACE_ROUTE_CMD | Nicht anwendbar |
INCLUDE_IPWRAP_GETHOSTBYADDR | Nicht anwendbar |
INCLUDE_IPWRAP_GETHOSTBYNAME | Nicht anwendbar |
INCLUDE_IPWRAP_GETNAMEINFO | Nicht anwendbar |
INCLUDE_IPWRAP_IFNAME | Nicht anwendbar |
INCLUDE_IPWRAP_ROUTECMD | Nicht anwendbar |
INCLUDE_MMAP | Nicht anwendbar |
INCLUDE_PING | Nicht anwendbar |
INCLUDE_PIPES | Nicht anwendbar |
INCLUDE_POSIX_MAPPED_FILES | Nicht anwendbar |
INCLUDE_POSIX_PIPES | Nicht anwendbar |
INCLUDE_POSIX_PTHREAD_SCHEDULER | Nicht anwendbar |
INCLUDE_POSIX_SHM | Nicht anwendbar |
INCLUDE_RAM_DISK | Nicht anwendbar |
INCLUDE_RAM_DISK_FORMAT_HRFS | Nicht anwendbar |
INCLUDE_RANDOM_NUM_GEN | Nicht anwendbar |
INCLUDE_ROMFS | Nicht anwendbar |
INCLUDE_ROUTECMD | Nicht anwendbar |
INCLUDE_SC_PIPE | Nicht anwendbar |
INCLUDE_SC_POSIX_PIPE | Nicht anwendbar |
INCLUDE_SD_BUS | Nicht anwendbar |
INCLUDE_SECURITY | Nicht anwendbar |
INCLUDE_SEC_KEY_STORE_CMD | Nicht anwendbar |
INCLUDE_SHELL | Nicht anwendbar |
INCLUDE_SSH | Nicht anwendbar |
INCLUDE_STANDALONE_SYM_TBL | Nicht anwendbar |
INCLUDE_STARTUP_SCRIPT | Nicht anwendbar |
INCLUDE_TMP_DIR | Nicht anwendbar |
INCLUDE_UN_COMP | Nicht anwendbar |
INCLUDE_USB_GEN2_KEYBOARD | Nicht anwendbar |
INCLUDE_USB_GEN2_MOUSE | Nicht anwendbar |
INCLUDE_USB_GEN2_STORAGE_INIT | Nicht anwendbar |
INCLUDE_USB_TOUCH_SCREEN | Nicht anwendbar |
INCLUDE_USB_TOUCH_SCREEN_INIT | Nicht anwendbar |
INCLUDE_USER_DATABASE | Nicht anwendbar |
INCLUDE_USER_IDENTIFICATION | Nicht anwendbar |
INCLUDE_VRFS | Nicht anwendbar |
INCLUDE_VXBUS_SHOW | Nicht anwendbar |
DRV_TOUCH_SCREEN_TI_TSC2004 | Nicht anwendbar |
DRV_TOUCH_SCREEN_EETI_EXC7200 | Nicht anwendbar |
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_generisch spezifisch |
INCLUDE_I915 | itl_generisch spezifisch |
INCLUDE_MESA_FBDEV | itl_generisch spezifisch |
INCLUDE_MESA_GPUDEV_DRI | itl_generisch spezifisch |
INCLUDE_MESA_GPUDEV_DRI_I965 | itl_generisch spezifisch |
Die folgenden Komponenten werden implizit hinzugefügt und Sie müssen sie entfernen:
Ebene | Anmerkungen |
---|---|
INCLUDE_FTP | Nicht zutreffend |
INCLUDE_SHELL_SECURITY | Nicht zutreffend |
VIP-Parameter
Sie müssen die folgenden Parameter hinzufügen, damit Qt unter VxWorks ordnungsgemäß läuft:
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 '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 von 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 Touchscreen Xenarc 706TSA. |
RTP_MEM_FILL | True | Standardmäßig ist der Wert True und er muss True bleiben, damit Qt richtig funktioniert. |
Erstellen von Qt 6 für VxWorks
Host-Build
Ein Host-Build von Qt muss verfügbar sein, um Qt crosskompilieren zu können. Das liegt daran, dass während des Builds bestimmte Werkzeuge (wie moc
, rcc
, qmlcachegen
und qsb
) vom Host-Build aufgerufen werden. Sie haben die folgenden Optionen:
- Erstellen von Qt-Quellen für den Host,
- Installieren des Host-Builds mit Qt Online Installer.
Es ist jedoch ratsam, sicherzustellen, dass Sie Qt auch für das Desktop-Target auf dem Host kompilieren können, da die gleichen Werkzeuge auch für die Kompilierung für VxWorks benötigt werden.
Ausführen des Configure-Skripts
Die Befehle zum Konfigurieren, Erstellen und Installieren von Qt 6 für den Host sind die folgenden:
./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>
.
Erstellen von Qt 6 für das Zielsystem
Einrichten der Build-Umgebung
Bevor Sie configure ausführen und Qt 6 bauen, 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>
Vorbereiten 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 ein BD-SL-i.MX6-Gerät:
# Copyright (C) 2024 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause 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 Intel NUC6i3SYH:
# Copyright (C) 2024 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause 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)
Ein Beispiel für I.MX8:
# Copyright (C) 2024 The Qt Company Ltd. # SPDX-License-Identifier: BSD-3-Clause 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}/libgfxNxpVivEGL.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}/libgfxNxpVivGLESv2.so CACHE PATH "Path to GLES lib" FORCE) set(VxWorksPlatformGraphics_DEFINES "-D_NXPVIV -D__vxworks -D__VXWORKS__") set(VxWorksPlatformGraphics_LIBRARIES_PACK "${_common_lib_path}/libgfxNxpVivGAL.so" "${_common_lib_path}/libgfxNxpVivEGL.so" "${_common_lib_path}/libgfxNxpVivGLSLC.so" "${_common_lib_path}/libgfxNxpVivGLESv2.so" "${_common_lib_path}/libgfxNxpVivGLESv1_CM.so" "${_common_lib_path}/libgfxNxpVivVSC.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 Target
Nachfolgend finden Sie ein Beispiel für eine Build-Konfiguration für das BD-SL-i.MX6. Für die meisten VxWorks-Boards sieht der configure-Befehl sehr ähnlich aus. Standardmäßig ist Qt 6 für die Verwendung von Shared Libraries konfiguriert. Um Qt 6 statisch zu bauen, fügen Sie die Option -static
zu configure hinzu.
Stellen Sie sicher, dass die Umgebungsvariable {WIND_CC_SYSROOT} auf das VxWorks VSB-Root-Verzeichnis 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 mit einem Shadow-Build zu erstellen. Siehe Qt-Konfigurationsoptionen für weitere Informationen.
Warnung: Wenn VxWorks mit RTP_MEM_FILL
als false konfiguriert ist, dann benötigt Qt configure ein zusätzliches -DCMAKE_CXX_FLAGS="-DQT_RTP_MEM_FILL=1"
Argument.
Nach der Konfiguration bauen und installieren Sie Qt 6 für VxWorks mit diesen 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 Fenstersubstitution. Lesen Sie mehr über seine Konfiguration in EGLFS.
Erstellen von Qt-Anwendungen
Um eine Qt-Anwendung zu erstellen, müssen Sie das QT_VXWORKS_TOOLCHAIN_FILE als Umgebungsvariable oder als Define setzen.
Ein Beispiel für die Erstellung 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.9.0/demos/clocks -B <path/to/build/directory> cd <path/to/build/directory> cmake --build . --parallel
Qt-Anwendungen starten
Das folgende Beispiel zeigt, wie man eine Anwendung startet, wenn Qt 6 mit Shared Libraries gebaut wurde. Bei einem statisch erstellten Qt 6 brauchen Sie die Umgebungsvariable LD_LIBRARY_PATH
nicht für die Qt-Bibliotheken zu verwenden, aber sie muss auf den Ort der gemeinsam genutzten VxWorks-Bibliotheken zeigen (zum Beispiel libc und OpenGL ES 2.0). Für die statischen Qt 6-Bibliotheken wird sie nicht benötigt.
putenv "LD_LIBRARY_PATH=/sd0:1/lib" cd "/sd0:1" rtpSp("<Qt 6 VxWorks application>", 200, 0x100000, 0, 0x01000000)
Debuggen von Qt-Anwendungen
Um Qt-Anwendungen zu debuggen, müssen Sie Ihrer VxWorks VSB Folgendes hinzufügen:
vxprj vsb config -s -add "_WRS_CONFIG_TCF_GDB_RSP=y"
Zu Ihrer VxWorks VIP-Konfiguration hinzufügen:
"INCLUDE_DEBUG_AGENT" "INCLUDE_DEBUG_AGENT_START" "INCLUDE_STANDALONE_SYM_TBL"
Von der Kommandozeile aus
- 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
- Hängen Sie den Debugger an die bereits laufende Anwendung an:
"attach <id from monitor>"
- Verwenden Sie GDB-Befehle zum Debuggen.
Von der Workbench aus
- Erstellen Sie ein CMake-Echtzeitprozess-Projekt.
- Setzen Sie die VSB, die Debugging konfiguriert hat.
- Entfernen Sie set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") aus CMakeLists.txt.
- Fügen Sie Qt CMake-bezogenen Code zur CMakeLists.txt hinzu, wie in Getting started with CMake beschrieben.
- Vor
project()
fügen Sieunset(CMAKE_TOOLCHAIN_FILE CACHE)
undCMAKE_TOOLCHAIN_FILE
hinzu, die auf die Qt6-Toolchain-Datei undQT_CHAINLOAD_TOOLCHAIN_FILE
auf die VSB-Toolchain-Datei verweisen. Zum 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 die Anwendung Project.
- Erstellen Sie eine neue Verbindung.
- Starten Sie den RTP-Prozess zum Debuggen.
- Klicken Sie auf Erweiterte Optionen.
- Setzen Sie die Stackgröße auf 0x100000.
Qt für VxWorks Eingabe-Plugins
VxWorks verwendet seine eigene Implementierung von libevdev
, die eine API hat, die der von Linux sehr ähnlich ist, sich aber in den Fähigkeiten unterscheidet. Aus diesem Grund implementiert Qt für VxWorks separate Eingabe-Plugins für Maus, Tastatur und Touchscreen, die auf {inputs-linux-device.html}{Linux evdev} basieren, mit Unterschieden, die im Folgenden erläutert werden.
VxMouse
VxMouse
verwendet das gleiche Konfigurationsschema wie EvdevMouse, mit Ausnahme einer anderen Umgebungsvariablen: QT_QPA_VXEVDEV_MOUSE_PARAMETERS
. Außerdem ignoriert VxMouse
die Parameter nocompress
, dejitter
und grab
.
VxTastatur
VxKeyboard
verwendet dasselbe Konfigurationsschema wie EvdevKeyboard, mit Ausnahme einer anderen Umgebungsvariablen: QT_QPA_VXEVDEV_KEYBOARD_PARAMETERS
.
VxTouch
VxTouch
verwendet das gleiche Konfigurationsschema wie EvdevTouch, mit Ausnahme der unterschiedlichen Umgebungsvariablen:
QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS
QT_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 den minimalen und maximalen Berührungspunkt für die Y-Achse |
Beschränkungen
Video-Speicher
Auf Systemen mit einer bestimmten Menge an dediziertem Videospeicher ist möglicherweise besondere Vorsicht geboten, bevor Qt-Anwendungen ausgeführt werden, die auf Qt Quick oder Klassen wie QOpenGLWidget basieren. Die Standardeinstellung kann 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 kann es zu unerwarteten Fehlern kommen. Es wird daher empfohlen, dafür zu sorgen, dass mindestens 128 MB GPU-Speicher zur Verfügung stehen. Bei Systemen, die keinen festen Speicherplatz für die GPU reserviert haben, stellt dies kein Problem dar.
© 2025 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.