Qt pour VxWorks
Pour plus d'informations, contactez The Qt Company : https://www.qt.io/contact-us/
Licences Qt pour VxWorks
Qt pour VxWorks est disponible sous la licence Qt for Device Creation Professional (DCP). Pour plus d'informations, consultez la page Tarifs Qt.
Architectures et versions de VxWorks prises en charge
Qt 6.10 a été testé sur VxWorks 25.03.
Architectures prises en charge :
- ARM-v7 — Testé sur BD-SL-i.MX6. BSP utilisé : fsl_imx6
- x86_64 — Testé sur Intel NUC6i3SYH. BSP utilisé : itl_generic
Si vous êtes intéressé par des versions plus récentes de Qt, veuillez contacter les services professionnels Qt.
Configuration requise pour VxWorks
Qt Widgets Applications
- Prise en charge de POSIX
- Prise en charge de C++17
Qt Quick 2 Applications
Toutes les fonctionnalités requises pour les applications « Qt Widgets », ainsi que les suivantes :
- Périphérique GPU (GPUDEV) pour OpenGL ES 2.0
Modules pris en charge
La plupart des modules Qt essentiels ainsi que certains modules complémentaires sont pris en charge.
Modules essentiels pris en charge
| Module Qt | Remarques |
|---|---|
| Qt Core | QProcess n'est pas pris en charge. QLocalSocket et QLocalServer ne prennent en charge que SOCK_SEQPACKET. |
| Qt GUI | Sans objet |
| Qt Network | Sans objet |
| Qt Qml | Sans objet |
| Qt Quick | Sans objet |
| Qt Quick Controls | Sans objet |
| Qt Quick Dialogs | Sans objet |
| Qt Quick Layouts | Sans objet |
| Qt Quick Test | Sans objet |
| Qt Test | Sans objet |
| Qt Widgets | Sans objet |
Modules complémentaires pris en charge
| Extensions Qt |
|---|
| Qt Concurrent |
| Qt GRPC/Protobuf |
| Qt Graphs |
| Qt Image Formats |
| Qt Multimedia |
| Interfaces natives Qt |
| Qt OpenGL |
| Qt Quick 3D |
| Qt Quick Compiler |
| Qt Quick Effects |
| Qt SQL |
| Qt SVG |
| Qt Virtual Keyboard |
Remarque : vous pouvez exclure explicitement les modules non pris en charge ou inutilisés de la compilation à l'aide de l'option -skip <module> lors de l'exécution de l'outil configure.
Remarques sur les plateformes
Qt est conçu pour être utilisé par les applications RTP ; il n'y a pas de prise en charge de DKM.
Avec la sortie de Qt 5.0, Qt ne contient plus sa propre implémentation de système de fenêtrage : QWS n'est plus une plateforme prise en charge. Pour les cas d'utilisation à processus unique, la Qt Platform Abstraction constitue une solution plus performante.
Il existe un plugin utilisable sous VxWorks : EGLFS. La disponibilité de ce plugin dépend de la configuration de Qt.
Configuration pour un périphérique spécifique
Préparez votre environnement en installant le SDK VxWorks et en vous procurant la licence WindRiver requise par le programme d'installation et pour la création d'images VxWorks. Recherchez le programme d'installation approprié sur {https://gallery.windriver.com/portal/products}.
La compilation de Qt pour un périphérique donné nécessite l'installation de Qt 6 sur l'hôte de compilation, une chaîne d'outils et un sysroot. Reportez-vous à la section « Compilation croisée de Qt » pour plus de détails. De plus, certains périphériques nécessitent un code d'adaptation spécifique au fabricant pour la prise en charge d'EGL et d'OpenGL 2.0.
Exigences relatives aux images VxWorks
Qt pour VxWorks nécessite l’intégration de certains ensembles d’images VxWorks et composants dans le logiciel de base afin que Qt puisse se compiler et fonctionner correctement. Cette liste n’est en aucun cas exhaustive, car elle dépend des exigences matérielles, logicielles et système de votre projet. Cependant, le tableau suivant répertorie les éléments indispensables au fonctionnement de certaines fonctionnalités (notamment la prise en charge des écrans tactiles). Notez également que ces éléments peuvent varier selon les versions de VxWorks.
Exemple de configuration VSB pour les BSP fsl_imx6 et itl_generic
Vous devez ajouter les fonctionnalités suivantes au VSB pour que Qt fonctionne correctement. Pour plus de détails, veuillez consulter la documentation WindRiver VxWorks.
| Fonctionnalité | Remarques |
|---|---|
DSI_DSI_KERNEL | Sans objet |
IPNET_COREIP | Sans objet |
IPNET_DHCPC | Sans objet |
SDMMC_DEVICE | Sans objet |
SDMMC_HOST | Sans objet |
SDMMC_SDHC | Sans objet |
SDMMC_STORAGE | Sans objet |
SERVICE_UN | Sans objet |
SOCKET | Sans objet |
USB_EHCI | Sans objet |
USB_KEYBOARD | Sans objet |
USB_MOUSE | Sans objet |
USB_STORAGE | Sans objet |
USB_TOUCHSCREEN | Sans objet |
EVDEV | Sans objet |
EVDEV_LIB | Sans objet |
EVDEV_TI_TSC2004_TS | Sans objet |
EVDEV_EETI_EXC7200_TS | Sans objet |
AUDIO | Sans objet |
GPUDEV_FSLVIVGPU | Spécifique à fsl_imx6 |
HASH | Sans objet |
OPENSSL | Sans objet |
RANDOM_ENTROPY_INJECT | Sans objet |
IPNET_SSH | Sans objet |
USER_MANAGEMENT | Sans objet |
ICU | Sans objet |
DRM | itl_generic spécifique |
ITLI915 | itl_générique spécifique |
LIBDRM | itl_generic spécifique |
MESA | itl_generic et nxp_imx8 spécifique |
Les variables de configuration suivantes sont ajoutées implicitement et vous devez les supprimer :
| Variable | Remarques |
|---|---|
_WRS_CONFIG_EVDEV_OPTIMIZED_MODE | Sans objet |
_WRS_CONFIG_EVDEV_DISPLAY_POINT_TRANSLATE | Sans objet |
_WRS_CONFIG_MESA_MANGLE | itl_generic spécifique |
Vous devez ajouter les variables suivantes au fichier de configuration :
| Variable | Valeur | Remarques |
|---|---|---|
_WRS_CONFIG_RTP_SSP | y | Sans objet |
_WRS_CONFIG_RTP_STACK_PROTECTOR | y | Sans objet |
_WRS_CONFIG_MESA_GPUDEV_INTEL_GEN90 | y | Spécifique à itl_generic |
_WRS_CONFIG_EVDEV_COMPATIBLE_MODE | y | Nécessaire pour que Qt fonctionne correctement avec un écran tactile. |
Exemple de configuration VIP pour les BSP fsl_imx6 et itl_generic
Pour plus de détails, veuillez consulter la documentation WindRiver VxWorks.
| Ensemble | Remarques |
|---|---|
BUNDLE_POSIX | Ce pack est nécessaire pour assurer la compatibilité avec les fonctionnalités liées à POSIX requises par Qt. |
BUNDLE_RTP_DEPLOY | Sans objet |
BUNDLE_RTP_DEVELOP | Sans objet |
BUNDLE_STANDALONE_SHELL | Sans objet |
| Composant | Remarques |
|---|---|
INCLUDE_TMP_DIR INCLUDE_RAM_DISK_FORMAT_HRFS | L'inclusion de ces deux composants est nécessaire si vous souhaitez utiliser QTemporaryFile. Notez que vous devez également envisager de définir TMP_DIR_SIZE sur une valeur appropriée |
DRV_AUDIO_FSL_SSI | Sans objet |
DRV_AUDIO_FSL_SGTL5000 | Sans objet |
DRV_FSL_SDHC_CTRL | Sans objet |
DRV_IMX_SDHC_CTRL | Sans objet |
INCLUDE_EHCI_INIT | Sans objet |
INCLUDE_FSL_IMX6Q_SABRELITE | Sans objet |
DRV_MMCSTORAGE_CARD | Sans objet |
DRV_SDSTORAGE_CARD | Sans objet |
INCLUDE_AUDIO_LIB_CORE | Sans objet |
INCLUDE_AUDIO_LIB_WAV | Sans objet |
INCLUDE_CUSTOM_ENTROPY_ADD | Sans objet |
INCLUDE_DEBUG_AGENT_START | Sans objet |
INCLUDE_DEFAULT_TIMEZONE | Sans objet |
INCLUDE_DISK_UTIL | Sans objet |
INCLUDE_DOSFS | Sans objet |
INCLUDE_DSAPARAM_CMD | Sans objet |
INCLUDE_END | Sans objet |
INCLUDE_EVDEV_LIB_CORE | Sans objet |
INCLUDE_EVDEV_LIB_KBD | Sans objet |
INCLUDE_EVDEV_LIB_KBD_MAP_US | Sans objet |
INCLUDE_EVDEV_LIB_PTR | Sans objet |
INCLUDE_EVDEV_LIB_TS | Sans objet |
INCLUDE_GENDSA_CMD | Sans objet |
INCLUDE_GENRSA_CMD | Sans objet |
INCLUDE_GETADDRINFO | Sans objet |
INCLUDE_GETNAMEINFO | Sans objet |
INCLUDE_HRFS | Sans objet |
INCLUDE_HRFS_ACCESS_TIMESTAMP | Sans objet |
INCLUDE_HRFS_FORMAT | Sans objet |
INCLUDE_HRFS_HISPEED_WRITE_MODE | Sans objet |
INCLUDE_IFCONFIG | Sans objet |
INCLUDE_IO_REALPATH | Ce composant est nécessaire pour permettre l'utilisation de la fonction realpath requise pour QFileInfo |
INCLUDE_IPATTACH | Sans objet |
INCLUDE_IPCOM_SYSLOGD_CMD | Sans objet |
INCLUDE_IPCOM_SYSVAR_CMD | Sans objet |
INCLUDE_IPCOM_USE_RAM_DISK | Sans objet |
INCLUDE_IPCOM_USE_TIME_CMD | Sans objet |
INCLUDE_IPDHCPC | Sans objet |
INCLUDE_IPDNSC | Sans objet |
INCLUDE_IPD_CMD | Sans objet |
INCLUDE_IPFTPC | Sans objet |
INCLUDE_IPFTP_CMD | Sans objet |
INCLUDE_IPIFCONFIG_CMD | Sans objet |
INCLUDE_IPNETSTAT_CMD | Sans objet |
INCLUDE_IPNSLOOKUP_CMD | Sans objet |
INCLUDE_IPPING_CMD | Sans objet |
INCLUDE_IPROUTE_CMD | Sans objet |
INCLUDE_IPTRACE_ROUTE_CMD | Sans objet |
INCLUDE_IPWRAP_GETHOSTBYADDR | Sans objet |
INCLUDE_IPWRAP_GETHOSTBYNAME | Sans objet |
INCLUDE_IPWRAP_GETNAMEINFO | Sans objet |
INCLUDE_IPWRAP_IFNAME | Sans objet |
INCLUDE_IPWRAP_ROUTECMD | Sans objet |
INCLUDE_MMAP | Sans objet |
INCLUDE_PING | Sans objet |
INCLUDE_PIPES | Sans objet |
INCLUDE_POSIX_MAPPED_FILES | Sans objet |
INCLUDE_POSIX_PIPES | Sans objet |
INCLUDE_POSIX_PTHREAD_SCHEDULER | Sans objet |
INCLUDE_POSIX_SHM | Sans objet |
INCLUDE_RAM_DISK | Sans objet |
INCLUDE_RAM_DISK_FORMAT_HRFS | Sans objet |
INCLUDE_RANDOM_NUM_GEN | Sans objet |
INCLUDE_ROMFS | Sans objet |
INCLUDE_ROUTECMD | Sans objet |
INCLUDE_SC_PIPE | Sans objet |
INCLUDE_SC_POSIX_PIPE | Sans objet |
INCLUDE_SD_BUS | Sans objet |
INCLUDE_SECURITY | Sans objet |
INCLUDE_SEC_KEY_STORE_CMD | Sans objet |
INCLUDE_SHELL | Sans objet |
INCLUDE_SSH | Sans objet |
INCLUDE_STANDALONE_SYM_TBL | Sans objet |
INCLUDE_STARTUP_SCRIPT | Sans objet |
INCLUDE_TMP_DIR | Sans objet |
INCLUDE_UN_COMP | Sans objet |
INCLUDE_USB_GEN2_KEYBOARD | Sans objet |
INCLUDE_USB_GEN2_MOUSE | Sans objet |
INCLUDE_USB_GEN2_STORAGE_INIT | Sans objet |
INCLUDE_USB_TOUCH_SCREEN | Sans objet |
INCLUDE_USB_TOUCH_SCREEN_INIT | Sans objet |
INCLUDE_USER_DATABASE | Sans objet |
INCLUDE_USER_IDENTIFICATION | Sans objet |
INCLUDE_VRFS | Sans objet |
INCLUDE_VXBUS_SHOW | Sans objet |
DRV_TOUCH_SCREEN_TI_TSC2004 | Sans objet |
DRV_TOUCH_SCREEN_EETI_EXC7200 | Sans objet |
INCLUDE_FBDEV_FSLIPU_0 | Spécifique à fsl_imx6 |
INCLUDE_FBDEV_SPLASH | Sans objet |
INCLUDE_GPUDEV_FSLVIV_API | Spécifique à fsl_imx6 |
INCLUDE_GPUDEV_FSLVIV_API_INIT | Spécifique à fsl_imx6 |
INCLUDE_GPUDEV_ITLGMC_2 | Spécifique à itl_generic |
INCLUDE_I915 | Spécifique à itl_generic |
INCLUDE_MESA_FBDEV | Spécifique à itl_generic |
INCLUDE_MESA_GPUDEV_DRI | Spécifique à itl_generic |
INCLUDE_MESA_GPUDEV_DRI_I965 | spécifique à itl_generic |
Les composants suivants sont ajoutés implicitement et vous devez les supprimer :
| Couche | Remarques |
|---|---|
INCLUDE_FTP | Sans objet |
INCLUDE_SHELL_SECURITY | Sans objet |
Paramètres VIP
Vous devez ajouter les paramètres suivants pour que Qt fonctionne correctement sous VxWorks :
| Paramètre | Exemple de valeur | Remarques |
|---|---|---|
SEC_VAULT_KEY_ENCRYPTING_PW | '"vxTarget"' | Sans objet |
UDB_STORAGE_PATH | '"/ram/vxUserDB.txt"' | Sans objet |
UDB_HASH_KEY | '"123456789"' | Sans objet |
UDB_HASH_KEY_LEN | 9 | Exemple de valeur, voir ci-dessus |
FSLVIV_RTP_COMMAND_BUFFER_QUEUE | 32 | Pour l'architecture « arm » |
SYS_CLK_RATE | 100 | Sans objet |
RTP_PTHREAD_STACK_SIZE_DEFAULT | 262144 | Requis pour que les exemples qtquick3d fonctionnent. Peut être remplacé par la variable d’environnement PTHREAD_STACK_SIZE_DEFAULT. |
TMP_DIR_SIZE | 614400 | Valeur minimale pour réussir les tests internes de Qt Test |
NUM_FILES | 300 | Sans objet |
RTP_FD_NUM_MAX | 300 | Sans objet |
HRFS_DEFAULT_MAX_FILES | 300 | Sans objet |
ITLGMC_FBDEV_RESOLUTION_2 | '"1024x768-32"' | Exemple de valeur pour l'écran tactile Xenarc 706TSA connecté via HDMI. |
RTP_MEM_FILL | True | Par défaut, la valeur est « True » et elle doit rester « True » pour que Qt fonctionne correctement. |
Compilation de Qt 6 pour VxWorks
Compilation sur l'hôte
Une version de Qt compilée sur l'hôte doit être disponible pour permettre la compilation croisée de Qt. En effet, lors de la compilation, certains outils (tels que moc, rcc, qmlcachegen et qsb) sont appelés à partir de la version compilée sur l'hôte. Vous disposez des options suivantes :
- Compilation des sources Qt pour l’hôte,
- Installer la compilation de l’hôte à l’aide de Qt Online Installer.
Il est toutefois conseillé de vous assurer que vous pouvez également compiler Qt pour la cible de bureau sur l’hôte, car les mêmes outils sont également nécessaires lors de la compilation pour VxWorks.
Exécution du script « Configure »
Les commandes permettant de configurer, de compiler et d'installer Qt 6 sur l'hôte sont les suivantes :
./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 .Ces commandes installent Qt 6 sur l'hôte dans le répertoire <path_to_Qt 6_host_installation_dir>.
Compilation de Qt 6 pour la cible
Configuration de l’environnement de compilation
Avant d'exécuter la commande « configure » et de compiler Qt 6, vous devez ouvrir le VxWorks Development Shell dans l'invite de commande.
- 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>
Préparation du fichier de chaîne d'outils CMake personnalisée
Pour inclure les bibliothèques graphiques du BSP, vous devez d'abord créer un fichier de chaîne d'outils CMake. Voici un exemple de fichier de chaîne d'outils CMake pour le périphérique 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)Exemple pour l'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)Exécution de la commande « configure » de Qt 6 pour la cible
Vous trouverez ci-dessous un exemple de configuration de compilation pour la BD-SL-i.MX6. Pour la plupart des cartes VxWorks, la commande `configure` est très similaire. Par défaut, Qt 6 est configuré pour utiliser des bibliothèques partagées. Pour compiler Qt 6 de manière statique, ajoutez l'option ` -static ` à la commande `configure`.
Assurez-vous que la variable d’environnement {WIND_CC_SYSROOT} est définie sur le répertoire racine du VSB de VxWorks.
./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> \Il est recommandé de compiler Qt 6 à l’aide d’une compilation « shadow ». Reportez-vous à la section Options de configuration de Qt pour plus d’informations.
Avertissement : si VxWorks est configuré avec l'option ` RTP_MEM_FILL ` définie sur `false`, la commande `configure` de Qt nécessite un argument supplémentaire : ` -DCMAKE_CXX_FLAGS="-DQT_RTP_MEM_FILL=1" `.
Une fois la configuration terminée, compilez et installez Qt 6 pour VxWorks à l’aide des commandes suivantes :
cd <host build directory>
cmake --build . --parallel
cmake --install .Plug-ins de plateforme pour les périphériques VxWorks
Qt pour VxWorks prend en charge le plugin de plateforme EGLFS pour une substitution native des fenêtres. Pour en savoir plus sur sa configuration, consultez la section EGLFS.
Compilation d’applications Qt
Pour compiler une application Qt, vous devez définir QT_VXWORKS_TOOLCHAIN_FILE en tant que variable d’environnement ou en tant que définition.
Exemple de compilation de la démo Qt « 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 . --parallelDéfinition des variables d'environnement
| Variable | Description |
|---|---|
| QT_QPA_FONTDIR | Chemin d'accès aux polices. |
| QT_QPA_EGLFS_FB | Chemin d'accès au périphérique de framebuffer. |
| LD_LIBRARY_PATH | Chemin d'accès aux bibliothèques dynamiques. |
| ICU_DATA | Chemin d'accès aux données ICU. |
| QT_QPA_EGLFS_INTEGRATION | Intégration Eglfs, eglfs_viv ou eglfs_kms. |
| QT_QPA_EGLFS_KMS_CONFIG | Chemin d'accès à kms.conf. |
Remarque : le cache disqueQML ne fonctionne pas ; désactivez-le à l’aide de la variable suivante pour éviter de ralentir le démarrage : QML_DISABLE_DISK_CACHE.
Définissez les variables d’environnement dans un script de démarrage comme suit, par exemple :
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")Le fichier ` kms.conf ` pour le périphérique Intel KabyLake peut se présenter comme suit, par exemple :
{
"device": "/dev/dri/card0",
"hwcursor": false,
"pbuffers": true,
"outputs": [
{
"name": "DP",
"mode": "1920x1080"
}
]
}Exécution d’applications Qt
L'exemple suivant montre comment lancer une application à l'aide de la commande VxWorks « rtpSp » :
rtpSp("<Qt 6 VxWorks application>", 200, 0x100000, 0, 0x01000000)Débogage d’applications Qt
Pour déboguer des applications Qt, vous devez ajouter ce qui suit à votre VSB VxWorks :
vxprj vsb config -s -add "_WRS_CONFIG_TCF_GDB_RSP=y"Ajoutez à votre configuration VIP VxWorks :
"INCLUDE_DEBUG_AGENT"
"INCLUDE_DEBUG_AGENT_START"
"INCLUDE_STANDALONE_SYM_TBL"Depuis la ligne de commande
- Lancez l'application à déboguer sur le périphérique via SSH ou la connexion série USB :
rtpSp("<Qt 6 VxWorks application>", 200, 0x100000, 0, 0x01000000) - Lancez le débogueur VxWorks sur le PC :
vxgdb <binary to debug> - Affichez la liste des processus en cours d'exécution dans le débogueur :
monitor ps - Connectez le débogueur à l'application déjà en cours d'exécution :
"attach <id from monitor>" - Utilisez les commandes GDB pour le débogage.
Extrait de Qt Creator
Pour déboguer à partir d’ Qt Creator, consultez Qt Creator: Débogage d’applications C++ sur des périphériques VxWorks.
Depuis Workbench
- Créez un projet CMake Real Time Process.

- Définissez le VSB sur lequel le débogage est configuré.
- Supprimez la ligne set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") du fichier CMakeLists.txt.
- Ajoutez le code CMake lié à Qt dans le fichier CMakeLists.txt en suivant le guide « Getting started with CMake ».
- Avant «
project()», ajoutez «unset(CMAKE_TOOLCHAIN_FILE CACHE)» et ajoutez «CMAKE_TOOLCHAIN_FILE» en pointant vers le fichier de la chaîne d'outils Qt6, ainsi que «QT_CHAINLOAD_TOOLCHAIN_FILE» vers le fichier de la chaîne d'outils VSB. Par exemple :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") - Compilez le projet d’application.
- Créez une nouvelle connexion.

- Lancez le processus RTP pour déboguer.

- Cliquez sur « Options avancées ».

- Définissez la taille de la pile sur 0x100000.

Plug-ins d'entrée Qt pour VxWorks
VxWorks utilise sa propre implémentation d'libevdev, dont l'API est très similaire à celle de Linux, mais dont les capacités diffèrent. C'est pourquoi Qt implémente des plugins d'entrée distincts pour VxWorks afin de gérer la souris, le clavier et l'écran tactile ; ceux-ci sont basés sur {inputs-linux-device.html}{Linux evdev}, avec des différences expliquées ci-dessous.
VxMouse
VxMouse utilise le même schéma de configuration qu’EvdevMouse, à l’exception d’une variable d’environnement différente : QT_QPA_VXEVDEV_MOUSE_PARAMETERS. De plus, VxMouse ignore les paramètres nocompress, dejitter et grab.
VxKeyboard
VxKeyboard utilise le même schéma de configuration qu’EvdevKeyboard, à l’exception d’une variable d’environnement différente : QT_QPA_VXEVDEV_KEYBOARD_PARAMETERS.
VxTouch
VxTouch utilise le même schéma de configuration qu'EvdevTouch, à l'exception de variables d'environnement différentes :
QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERSQT_QPA_VXEVDEV_DEBUG
De plus, VxTouch ajoute deux nouveaux paramètres :
| Paramètre | Description |
|---|---|
rangex=MIN_X,MAX_X | Remplace les valeurs minimales et maximales du point de contact pour l'axe X |
rangey=MIN_Y,MAX_Y | Remplace les valeurs minimales et maximales des points de contact sur l'axe Y |
Limitations
Mémoire vidéo
Les systèmes disposant d'une quantité fixe de mémoire vidéo dédiée peuvent nécessiter une attention particulière avant d'exécuter une application Qt basée sur Qt Quick ou des classes telles que QOpenGLWidget. Le paramètre par défaut peut s'avérer insuffisant pour de telles applications, en particulier lorsqu'elles sont affichées sur un écran à haute résolution (par exemple, Full HD). Dans ce cas, elles risquent de présenter des dysfonctionnements inattendus. Il est donc recommandé de s’assurer qu’au moins 128 Mo de mémoire GPU sont disponibles. Pour les systèmes ne disposant pas d’une quantité fixe de mémoire réservée au GPU, cela ne pose pas de problème.
© 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.