Sur cette page

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 QtRemarques
Qt CoreQProcess n'est pas pris en charge. QLocalSocket et QLocalServer ne prennent en charge que SOCK_SEQPACKET.
Qt GUISans objet
Qt NetworkSans objet
Qt QmlSans objet
Qt QuickSans objet
Qt Quick ControlsSans objet
Qt Quick DialogsSans objet
Qt Quick LayoutsSans objet
Qt Quick TestSans objet
Qt TestSans objet
Qt WidgetsSans objet

Modules complémentaires pris en charge

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_KERNELSans objet
IPNET_COREIPSans objet
IPNET_DHCPCSans objet
SDMMC_DEVICESans objet
SDMMC_HOSTSans objet
SDMMC_SDHCSans objet
SDMMC_STORAGESans objet
SERVICE_UNSans objet
SOCKETSans objet
USB_EHCISans objet
USB_KEYBOARDSans objet
USB_MOUSESans objet
USB_STORAGESans objet
USB_TOUCHSCREENSans objet
EVDEVSans objet
EVDEV_LIBSans objet
EVDEV_TI_TSC2004_TSSans objet
EVDEV_EETI_EXC7200_TSSans objet
AUDIOSans objet
GPUDEV_FSLVIVGPUSpécifique à fsl_imx6
HASHSans objet
OPENSSLSans objet
RANDOM_ENTROPY_INJECTSans objet
IPNET_SSHSans objet
USER_MANAGEMENTSans objet
ICUSans objet
DRMitl_generic spécifique
ITLI915itl_générique spécifique
LIBDRMitl_generic spécifique
MESAitl_generic et nxp_imx8 spécifique

Les variables de configuration suivantes sont ajoutées implicitement et vous devez les supprimer :

VariableRemarques
_WRS_CONFIG_EVDEV_OPTIMIZED_MODESans objet
_WRS_CONFIG_EVDEV_DISPLAY_POINT_TRANSLATESans objet
_WRS_CONFIG_MESA_MANGLEitl_generic spécifique

Vous devez ajouter les variables suivantes au fichier de configuration :

VariableValeurRemarques
_WRS_CONFIG_RTP_SSPySans objet
_WRS_CONFIG_RTP_STACK_PROTECTORySans objet
_WRS_CONFIG_MESA_GPUDEV_INTEL_GEN90ySpécifique à itl_generic
_WRS_CONFIG_EVDEV_COMPATIBLE_MODEyNé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.

EnsembleRemarques
BUNDLE_POSIXCe pack est nécessaire pour assurer la compatibilité avec les fonctionnalités liées à POSIX requises par Qt.
BUNDLE_RTP_DEPLOYSans objet
BUNDLE_RTP_DEVELOPSans objet
BUNDLE_STANDALONE_SHELLSans objet
ComposantRemarques
INCLUDE_TMP_DIR INCLUDE_RAM_DISK_FORMAT_HRFSL'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_SSISans objet
DRV_AUDIO_FSL_SGTL5000Sans objet
DRV_FSL_SDHC_CTRLSans objet
DRV_IMX_SDHC_CTRLSans objet
INCLUDE_EHCI_INITSans objet
INCLUDE_FSL_IMX6Q_SABRELITESans objet
DRV_MMCSTORAGE_CARDSans objet
DRV_SDSTORAGE_CARDSans objet
INCLUDE_AUDIO_LIB_CORESans objet
INCLUDE_AUDIO_LIB_WAVSans objet
INCLUDE_CUSTOM_ENTROPY_ADDSans objet
INCLUDE_DEBUG_AGENT_STARTSans objet
INCLUDE_DEFAULT_TIMEZONESans objet
INCLUDE_DISK_UTILSans objet
INCLUDE_DOSFSSans objet
INCLUDE_DSAPARAM_CMDSans objet
INCLUDE_ENDSans objet
INCLUDE_EVDEV_LIB_CORESans objet
INCLUDE_EVDEV_LIB_KBDSans objet
INCLUDE_EVDEV_LIB_KBD_MAP_USSans objet
INCLUDE_EVDEV_LIB_PTRSans objet
INCLUDE_EVDEV_LIB_TSSans objet
INCLUDE_GENDSA_CMDSans objet
INCLUDE_GENRSA_CMDSans objet
INCLUDE_GETADDRINFOSans objet
INCLUDE_GETNAMEINFOSans objet
INCLUDE_HRFSSans objet
INCLUDE_HRFS_ACCESS_TIMESTAMPSans objet
INCLUDE_HRFS_FORMATSans objet
INCLUDE_HRFS_HISPEED_WRITE_MODESans objet
INCLUDE_IFCONFIGSans objet
INCLUDE_IO_REALPATHCe composant est nécessaire pour permettre l'utilisation de la fonction realpath requise pour QFileInfo
INCLUDE_IPATTACHSans objet
INCLUDE_IPCOM_SYSLOGD_CMDSans objet
INCLUDE_IPCOM_SYSVAR_CMDSans objet
INCLUDE_IPCOM_USE_RAM_DISKSans objet
INCLUDE_IPCOM_USE_TIME_CMDSans objet
INCLUDE_IPDHCPCSans objet
INCLUDE_IPDNSCSans objet
INCLUDE_IPD_CMDSans objet
INCLUDE_IPFTPCSans objet
INCLUDE_IPFTP_CMDSans objet
INCLUDE_IPIFCONFIG_CMDSans objet
INCLUDE_IPNETSTAT_CMDSans objet
INCLUDE_IPNSLOOKUP_CMDSans objet
INCLUDE_IPPING_CMDSans objet
INCLUDE_IPROUTE_CMDSans objet
INCLUDE_IPTRACE_ROUTE_CMDSans objet
INCLUDE_IPWRAP_GETHOSTBYADDRSans objet
INCLUDE_IPWRAP_GETHOSTBYNAMESans objet
INCLUDE_IPWRAP_GETNAMEINFOSans objet
INCLUDE_IPWRAP_IFNAMESans objet
INCLUDE_IPWRAP_ROUTECMDSans objet
INCLUDE_MMAPSans objet
INCLUDE_PINGSans objet
INCLUDE_PIPESSans objet
INCLUDE_POSIX_MAPPED_FILESSans objet
INCLUDE_POSIX_PIPESSans objet
INCLUDE_POSIX_PTHREAD_SCHEDULERSans objet
INCLUDE_POSIX_SHMSans objet
INCLUDE_RAM_DISKSans objet
INCLUDE_RAM_DISK_FORMAT_HRFSSans objet
INCLUDE_RANDOM_NUM_GENSans objet
INCLUDE_ROMFSSans objet
INCLUDE_ROUTECMDSans objet
INCLUDE_SC_PIPESans objet
INCLUDE_SC_POSIX_PIPESans objet
INCLUDE_SD_BUSSans objet
INCLUDE_SECURITYSans objet
INCLUDE_SEC_KEY_STORE_CMDSans objet
INCLUDE_SHELLSans objet
INCLUDE_SSHSans objet
INCLUDE_STANDALONE_SYM_TBLSans objet
INCLUDE_STARTUP_SCRIPTSans objet
INCLUDE_TMP_DIRSans objet
INCLUDE_UN_COMPSans objet
INCLUDE_USB_GEN2_KEYBOARDSans objet
INCLUDE_USB_GEN2_MOUSESans objet
INCLUDE_USB_GEN2_STORAGE_INITSans objet
INCLUDE_USB_TOUCH_SCREENSans objet
INCLUDE_USB_TOUCH_SCREEN_INITSans objet
INCLUDE_USER_DATABASESans objet
INCLUDE_USER_IDENTIFICATIONSans objet
INCLUDE_VRFSSans objet
INCLUDE_VXBUS_SHOWSans objet
DRV_TOUCH_SCREEN_TI_TSC2004Sans objet
DRV_TOUCH_SCREEN_EETI_EXC7200Sans objet
INCLUDE_FBDEV_FSLIPU_0Spécifique à fsl_imx6
INCLUDE_FBDEV_SPLASHSans objet
INCLUDE_GPUDEV_FSLVIV_APISpécifique à fsl_imx6
INCLUDE_GPUDEV_FSLVIV_API_INITSpécifique à fsl_imx6
INCLUDE_GPUDEV_ITLGMC_2Spécifique à itl_generic
INCLUDE_I915Spécifique à itl_generic
INCLUDE_MESA_FBDEVSpécifique à itl_generic
INCLUDE_MESA_GPUDEV_DRISpécifique à itl_generic
INCLUDE_MESA_GPUDEV_DRI_I965spécifique à itl_generic

Les composants suivants sont ajoutés implicitement et vous devez les supprimer :

CoucheRemarques
INCLUDE_FTPSans objet
INCLUDE_SHELL_SECURITYSans objet
Paramètres VIP

Vous devez ajouter les paramètres suivants pour que Qt fonctionne correctement sous VxWorks :

ParamètreExemple de valeurRemarques
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_LEN9Exemple de valeur, voir ci-dessus
FSLVIV_RTP_COMMAND_BUFFER_QUEUE32Pour l'architecture « arm »
SYS_CLK_RATE100Sans objet
RTP_PTHREAD_STACK_SIZE_DEFAULT262144Requis pour que les exemples qtquick3d fonctionnent. Peut être remplacé par la variable d’environnement PTHREAD_STACK_SIZE_DEFAULT.
TMP_DIR_SIZE614400Valeur minimale pour réussir les tests internes de Qt Test
NUM_FILES300Sans objet
RTP_FD_NUM_MAX300Sans objet
HRFS_DEFAULT_MAX_FILES300Sans objet
ITLGMC_FBDEV_RESOLUTION_2'"1024x768-32"'Exemple de valeur pour l'écran tactile Xenarc 706TSA connecté via HDMI.
RTP_MEM_FILLTruePar 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 :

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 . --parallel

Définition des variables d'environnement

VariableDescription
QT_QPA_FONTDIRChemin d'accès aux polices.
QT_QPA_EGLFS_FBChemin d'accès au périphérique de framebuffer.
LD_LIBRARY_PATHChemin d'accès aux bibliothèques dynamiques.
ICU_DATAChemin d'accès aux données ICU.
QT_QPA_EGLFS_INTEGRATIONIntégration Eglfs, eglfs_viv ou eglfs_kms.
QT_QPA_EGLFS_KMS_CONFIGChemin 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

  1. 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)
  2. Lancez le débogueur VxWorks sur le PC :
    vxgdb <binary to debug>
  3. Affichez la liste des processus en cours d'exécution dans le débogueur :
    monitor ps
  4. Connectez le débogueur à l'application déjà en cours d'exécution :
    "attach <id from monitor>"
  5. 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

  1. Créez un projet CMake Real Time Process.

    Sélectionner le projet CMake RTP

  2. Définissez le VSB sur lequel le débogage est configuré.
  3. Supprimez la ligne set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") du fichier CMakeLists.txt.
  4. Ajoutez le code CMake lié à Qt dans le fichier CMakeLists.txt en suivant le guide « Getting started with CMake ».
  5. 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")
  6. Compilez le projet d’application.
  7. Créez une nouvelle connexion.

    Connexion à l'appareil

  8. Lancez le processus RTP pour déboguer.

    Sélectionnez « Exécuter/Déboguer un processus en temps réel »

  9. Cliquez sur « Options avancées ».

    Paramètres d'exécution

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

    Paramètres avancés

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_PARAMETERS
  • QT_QPA_VXEVDEV_DEBUG

De plus, VxTouch ajoute deux nouveaux paramètres :

ParamètreDescription
rangex=MIN_X,MAX_XRemplace les valeurs minimales et maximales du point de contact pour l'axe X
rangey=MIN_Y,MAX_YRemplace 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.