Qt para VxWorks
Si desea más información, póngase en contacto con The Qt Company: https://www.qt.io/contact-us/
Licencias de Qt para VxWorks
Qt para VxWorks está disponible bajo la licencia Qt for Device Creation Professional (DCP). Para obtener más información, consulte Precios de Qt.
Arquitecturas y versiones de VxWorks soportadas
Qt 6.10 está verificado en VxWorks 25.03.
Arquitecturas compatibles:
- ARM-v7-Probado en BD-SL-i.MX6. BSP utilizado: fsl_imx6
- x86_64-Probado en Intel NUC6i3SYH. BSP utilizado: itl_generic
Si está interesado en versiones posteriores de Qt, póngase en contacto con los servicios profesionales de Qt.
Requisitos para VxWorks
Qt Widgets Aplicaciones
- Soporte POSIX
- Compatibilidad con C++17
Qt Quick 2 Aplicaciones
Todas las funciones necesarias para las aplicaciones de Qt Widgets y, además, las siguientes:
- Dispositivo GPU (GPUDEV) para OpenGL ES 2.0
Módulos compatibles
Se soportan la mayoría de los módulos esenciales de Qt y algunos módulos adicionales.
Módulos esenciales compatibles
| Módulo Qt | Notas |
|---|---|
| Qt Core | No hay soporte para QProcess. QLocalSocket y QLocalServer sólo soportan SOCK_SEQPACKET. |
| Qt GUI | No aplicable |
| Qt Network | No aplicable |
| Qt Qml | No aplicable |
| Qt Quick | No aplicable |
| Qt Quick Controls | No aplicable |
| Qt Quick Dialogs | No se aplica |
| Qt Quick Diseños | No aplicable |
| Qt Quick Prueba | No se aplica |
| Qt Test | No se aplica |
| Qt Widgets | No aplicable |
Complementos compatibles
Nota: Puede excluir explícitamente de la compilación los módulos no soportados o no utilizados mediante la opción -skip <módulo> al ejecutar la herramienta de configuración.
Notas sobre la plataforma
Qt está preparado para ser utilizado por aplicaciones RTP, no hay soporte para DKM.
Con el lanzamiento de Qt 5.0, Qt ya no contiene su propia implementación del sistema de ventanas: QWS ya no es una plataforma soportada. Para casos de uso de un solo proceso, la Abstracción de Plataforma Qt es una solución superior.
Hay un plugin que es utilizable en VxWorks: EGLFS. La disponibilidad de este plugin depende de la configuración de Qt.
Configuración para un dispositivo específico
Prepare su entorno instalando el SDK de VxWorks y obteniendo la licencia de WindRiver que necesita el instalador y para crear imágenes de VxWorks. Busque el instalador apropiado en {https://gallery.windriver.com/portal/products}.
La compilación de Qt para un dispositivo determinado requiere una instalación de Qt 6 para el host de compilación, un toolchain y un sysroot. Ver Compilación cruzada de Qt para más detalles. Además, algunos dispositivos requieren código de adaptación específico del fabricante para la compatibilidad con EGL y OpenGL 2.0.
Requisitos de imagen de VxWorks
Qt para VxWorks requiere que ciertos paquetes de imágenes y componentes de VxWorks estén incrustados en el software base para que Qt compile y funcione correctamente. La lista no es en absoluto completa, ya que depende de los requisitos de hardware, software y sistema de su proyecto. Sin embargo, la siguiente tabla contiene aquellos que son obligatorios para que ciertas funcionalidades funcionen (incluyendo el soporte de pantalla táctil). Tenga en cuenta también que estos pueden cambiar con las versiones de VxWorks.
Ejemplo de configuración VSB para los BSPs fsl_imx6 e itl_generic
Es necesario añadir las siguientes características a VSB para que Qt funcione correctamente. Para más detalles, consulte la documentación de WindRiver VxWorks.
| Característica | Notas |
|---|---|
DSI_DSI_KERNEL | No aplicable |
IPNET_COREIP | No se aplica |
IPNET_DHCPC | No aplicable |
SDMMC_DEVICE | No aplicable |
SDMMC_HOST | No se aplica |
SDMMC_SDHC | No se aplica |
SDMMC_STORAGE | No se aplica |
SERVICE_UN | No se aplica |
SOCKET | No se aplica |
USB_EHCI | No se aplica |
USB_KEYBOARD | No se aplica |
USB_MOUSE | No se aplica |
USB_STORAGE | No se aplica |
USB_TOUCHSCREEN | No se aplica |
EVDEV | No se aplica |
EVDEV_LIB | No se aplica |
EVDEV_TI_TSC2004_TS | No se aplica |
EVDEV_EETI_EXC7200_TS | No se aplica |
AUDIO | No aplicable |
GPUDEV_FSLVIVGPU | fsl_imx6 específico |
HASH | No se aplica |
OPENSSL | No aplicable |
RANDOM_ENTROPY_INJECT | No aplicable |
IPNET_SSH | No aplicable |
USER_MANAGEMENT | No aplicable |
ICU | No aplicable |
DRM | itl_genérico específico |
ITLI915 | itl_genérico específico |
LIBDRM | itl_generic específico |
MESA | itl_generic y nxp_imx8 específicos |
Las siguientes variables de configuración se añaden implícitamente y es necesario eliminarlas:
| Variable | Notas |
|---|---|
_WRS_CONFIG_EVDEV_OPTIMIZED_MODE | No aplicable |
_WRS_CONFIG_EVDEV_DISPLAY_POINT_TRANSLATE | No aplicable |
_WRS_CONFIG_MESA_MANGLE | itl_generic específica |
Debe añadir las siguientes variables a la configuración:
| Variable | Valor | Notas |
|---|---|---|
_WRS_CONFIG_RTP_SSP | y | No aplicable |
_WRS_CONFIG_RTP_STACK_PROTECTOR | y | No aplicable |
_WRS_CONFIG_MESA_GPUDEV_INTEL_GEN90 | y | itl_generic específico |
_WRS_CONFIG_EVDEV_COMPATIBLE_MODE | y | Necesario para que Qt funcione correctamente con una pantalla táctil. |
Ejemplo de configuración VIP para los BSP fsl_imx6 e itl_generic
Para más detalles, consulte la documentación de WindRiver VxWorks.
| Paquete | Notas |
|---|---|
BUNDLE_POSIX | Este paquete es necesario para la compatibilidad con las funcionalidades relacionadas con POSIX que requiere Qt. |
BUNDLE_RTP_DEPLOY | No aplicable |
BUNDLE_RTP_DEVELOP | No aplicable |
BUNDLE_STANDALONE_SHELL | No aplicable |
| Componente | Notas |
|---|---|
INCLUDE_TMP_DIR INCLUDE_RAM_DISK_FORMAT_HRFS | Es necesario incluir estos dos componentes si desea utilizar QTemporaryFile. Tenga en cuenta que también debe configurar TMP_DIR_SIZE con el valor adecuado. |
DRV_AUDIO_FSL_SSI | No aplicable |
DRV_AUDIO_FSL_SGTL5000 | No aplicable |
DRV_FSL_SDHC_CTRL | No aplicable |
DRV_IMX_SDHC_CTRL | No aplicable |
INCLUDE_EHCI_INIT | No aplicable |
INCLUDE_FSL_IMX6Q_SABRELITE | No se aplica |
DRV_MMCSTORAGE_CARD | No se aplica |
DRV_SDSTORAGE_CARD | No se aplica |
INCLUDE_AUDIO_LIB_CORE | No se aplica |
INCLUDE_AUDIO_LIB_WAV | No se aplica |
INCLUDE_CUSTOM_ENTROPY_ADD | No se aplica |
INCLUDE_DEBUG_AGENT_START | No se aplica |
INCLUDE_DEFAULT_TIMEZONE | No se aplica |
INCLUDE_DISK_UTIL | No se aplica |
INCLUDE_DOSFS | No se aplica |
INCLUDE_DSAPARAM_CMD | No se aplica |
INCLUDE_END | No se aplica |
INCLUDE_EVDEV_LIB_CORE | No se aplica |
INCLUDE_EVDEV_LIB_KBD | No se aplica |
INCLUDE_EVDEV_LIB_KBD_MAP_US | No se aplica |
INCLUDE_EVDEV_LIB_PTR | No se aplica |
INCLUDE_EVDEV_LIB_TS | No se aplica |
INCLUDE_GENDSA_CMD | No se aplica |
INCLUDE_GENRSA_CMD | No se aplica |
INCLUDE_GETADDRINFO | No se aplica |
INCLUDE_GETNAMEINFO | No se aplica |
INCLUDE_HRFS | No se aplica |
INCLUDE_HRFS_ACCESS_TIMESTAMP | No se aplica |
INCLUDE_HRFS_FORMAT | No se aplica |
INCLUDE_HRFS_HISPEED_WRITE_MODE | No se aplica |
INCLUDE_IFCONFIG | No aplicable |
INCLUDE_IO_REALPATH | Este componente es necesario para permitir el uso de la función realpath necesaria para QFileInfo |
INCLUDE_IPATTACH | No se aplica |
INCLUDE_IPCOM_SYSLOGD_CMD | No aplicable |
INCLUDE_IPCOM_SYSVAR_CMD | No aplicable |
INCLUDE_IPCOM_USE_RAM_DISK | No aplicable |
INCLUDE_IPCOM_USE_TIME_CMD | No aplicable |
INCLUDE_IPDHCPC | No se aplica |
INCLUDE_IPDNSC | No se aplica |
INCLUDE_IPD_CMD | No se aplica |
INCLUDE_IPFTPC | No se aplica |
INCLUDE_IPFTP_CMD | No se aplica |
INCLUDE_IPIFCONFIG_CMD | No se aplica |
INCLUDE_IPNETSTAT_CMD | No se aplica |
INCLUDE_IPNSLOOKUP_CMD | No se aplica |
INCLUDE_IPPING_CMD | No se aplica |
INCLUDE_IPROUTE_CMD | No se aplica |
INCLUDE_IPTRACE_ROUTE_CMD | No se aplica |
INCLUDE_IPWRAP_GETHOSTBYADDR | No se aplica |
INCLUDE_IPWRAP_GETHOSTBYNAME | No se aplica |
INCLUDE_IPWRAP_GETNAMEINFO | No se aplica |
INCLUDE_IPWRAP_IFNAME | No se aplica |
INCLUDE_IPWRAP_ROUTECMD | No se aplica |
INCLUDE_MMAP | No se aplica |
INCLUDE_PING | No se aplica |
INCLUDE_PIPES | No se aplica |
INCLUDE_POSIX_MAPPED_FILES | No se aplica |
INCLUDE_POSIX_PIPES | No se aplica |
INCLUDE_POSIX_PTHREAD_SCHEDULER | No se aplica |
INCLUDE_POSIX_SHM | No se aplica |
INCLUDE_RAM_DISK | No se aplica |
INCLUDE_RAM_DISK_FORMAT_HRFS | No se aplica |
INCLUDE_RANDOM_NUM_GEN | No se aplica |
INCLUDE_ROMFS | No se aplica |
INCLUDE_ROUTECMD | No se aplica |
INCLUDE_SC_PIPE | No se aplica |
INCLUDE_SC_POSIX_PIPE | No se aplica |
INCLUDE_SD_BUS | No se aplica |
INCLUDE_SECURITY | No se aplica |
INCLUDE_SEC_KEY_STORE_CMD | No se aplica |
INCLUDE_SHELL | No se aplica |
INCLUDE_SSH | No se aplica |
INCLUDE_STANDALONE_SYM_TBL | No se aplica |
INCLUDE_STARTUP_SCRIPT | No se aplica |
INCLUDE_TMP_DIR | No se aplica |
INCLUDE_UN_COMP | No se aplica |
INCLUDE_USB_GEN2_KEYBOARD | No se aplica |
INCLUDE_USB_GEN2_MOUSE | No se aplica |
INCLUDE_USB_GEN2_STORAGE_INIT | No se aplica |
INCLUDE_USB_TOUCH_SCREEN | No se aplica |
INCLUDE_USB_TOUCH_SCREEN_INIT | No se aplica |
INCLUDE_USER_DATABASE | No se aplica |
INCLUDE_USER_IDENTIFICATION | No se aplica |
INCLUDE_VRFS | No se aplica |
INCLUDE_VXBUS_SHOW | No se aplica |
DRV_TOUCH_SCREEN_TI_TSC2004 | No se aplica |
DRV_TOUCH_SCREEN_EETI_EXC7200 | No aplicable |
INCLUDE_FBDEV_FSLIPU_0 | fsl_imx6 específico |
INCLUDE_FBDEV_SPLASH | No aplicable |
INCLUDE_GPUDEV_FSLVIV_API | fsl_imx6 específico |
INCLUDE_GPUDEV_FSLVIV_API_INIT | fsl_imx6 específico |
INCLUDE_GPUDEV_ITLGMC_2 | itl_generic específico |
INCLUDE_I915 | itl_generic específico |
INCLUDE_MESA_FBDEV | itl_generic específico |
INCLUDE_MESA_GPUDEV_DRI | itl_generic específico |
INCLUDE_MESA_GPUDEV_DRI_I965 | itl_generic específico |
Los siguientes componentes se añaden implícitamente y es necesario eliminarlos:
| Capa | Notas |
|---|---|
INCLUDE_FTP | No aplicable |
INCLUDE_SHELL_SECURITY | No aplicable |
Parámetros VIP
Es necesario añadir los siguientes parámetros para que Qt funcione correctamente en VxWorks:
| Parámetro | Valor de ejemplo | Notas |
|---|---|---|
SEC_VAULT_KEY_ENCRYPTING_PW | '"vxTarget"' | No aplicable |
UDB_STORAGE_PATH | '"/ram/vxUserDB.txt"' | No aplicable |
UDB_HASH_KEY | '"123456789"' | No aplicable |
UDB_HASH_KEY_LEN | 9 | Valor de ejemplo, véase más arriba |
FSLVIV_RTP_COMMAND_BUFFER_QUEUE | 32 | Para arquitectura 'arm |
SYS_CLK_RATE | 100 | No aplicable |
RTP_PTHREAD_STACK_SIZE_DEFAULT | 262144 | Necesario para que funcionen los ejemplos qtquick3d. Puede anularse con la variable env PTHREAD_STACK_SIZE_DEFAULT. |
TMP_DIR_SIZE | 614400 | Valor mínimo para pasar los tests internos de Qt |
NUM_FILES | 300 | No aplicable |
RTP_FD_NUM_MAX | 300 | No se aplica |
HRFS_DEFAULT_MAX_FILES | 300 | No aplicable |
ITLGMC_FBDEV_RESOLUTION_2 | '"1024x768-32"' | Valor de ejemplo para la pantalla táctil Xenarc 706TSA conectada a través de HDMI. |
RTP_MEM_FILL | True | Por defecto el valor es True y necesita permanecer True para que Qt funcione correctamente. |
Construyendo Qt 6 para VxWorks
Compilación del host
Es necesario disponer de una compilación host de Qt para poder realizar la compilación cruzada de Qt. Esto se debe a que, durante la compilación, ciertas herramientas (como moc, rcc, qmlcachegen, y qsb) son invocadas desde la compilación host. Tienes las siguientes opciones:
- Construir Qt Sources para el host,
- Instalar la compilación del host usando Qt Online Installer.
Sin embargo, es aconsejable asegurarse de que se puede compilar Qt para el escritorio en el host también, ya que las mismas herramientas son también necesarias cuando se compila para VxWorks.
Ejecutar el script de configuración
Los comandos para configurar, compilar e instalar Qt 6 para host son los siguientes:
./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 .Estos comandos instalan Qt 6 para el host en <path_to_Qt 6_host_installation_dir>.
Construyendo Qt 6 para el Target
Configuración del entorno de compilación
Antes de ejecutar la configuración y compilación de Qt 6, debe abrir VxWorks Development Shell en el símbolo del sistema.
- 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>
Preparación del archivo CMake Toolchain personalizado
Para incluir librerías gráficas desde el BSP, primero necesitas crear un archivo CMake toolchain. Un ejemplo de archivo CMake toolchain para el dispositivo BD-SL-i.MX6:
# 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)Un ejemplo para 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)Ejecutando Qt 6 Configure para el Target
A continuación se muestra un ejemplo de configuración para la BD-SL-i.MX6. Para la mayoría de las placas VxWorks el comando configure es muy similar. Por defecto, Qt 6 está configurado para usar librerías compartidas. Para compilar Qt 6 estáticamente, añada la opción -static a configure.
Asegúrese de que la variable de entorno {WIND_CC_SYSROOT} está establecida en el directorio raíz 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> \Se recomienda compilar Qt 6 usando una shadow build. Ver Opciones de configuración de Qt para más información.
Advertencia: Si VxWorks está configurado con RTP_MEM_FILL como false, entonces Qt configure necesita un argumento extra -DCMAKE_CXX_FLAGS="-DQT_RTP_MEM_FILL=1".
Después de la configuración, compile e instale Qt 6 para VxWorks con estos comandos:
cd <host build directory> cmake --build . --parallel cmake --install .
Plugins de plataforma para dispositivos VxWorks
Qt para VxWorks soporta el plugin de plataforma EGLFS para una sustitución nativa de ventanas. Lee más sobre su configuración en EGLFS.
Construyendo Aplicaciones Qt
Para construir una aplicación Qt, debes establecer QT_VXWORKS_TOOLCHAIN_FILE como una variable de entorno o como una definición.
Un ejemplo para construir la demo de relojes Qt:
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
Estableciendo variables de entorno
| Variable | Descripción |
|---|---|
| QT_QPA_FONTDIR | Ruta a las fuentes. |
| QT_QPA_EGLFS_FB | Ruta al dispositivo framebuffer. |
| LD_LIBRARY_PATH | Ruta a las librerías dinámicas. |
| ICU_DATA | Ruta a los datos ICU. |
| QT_QPA_EGLFS_INTEGRATION | Integración Eglfs, eglfs_viv o eglfs_kms. |
| QT_QPA_EGLFS_KMS_CONFIG | Ruta a kms.conf. |
Nota: la caché de disco QML no funciona; desactívela con la siguiente variable para evitar que el arranque sea más lento: QML_DISABLE_DISK_CACHE.
Establezca las variables de entorno en una secuencia de comandos de inicio como se indica a continuación, por ejemplo:
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")El archivo kms.conf para el dispositivo Intel KabyLake puede tener este aspecto, por ejemplo:
{
"device": "/dev/dri/card0",
"hwcursor": false,
"pbuffers": true,
"outputs": [
{
"name": "DP",
"mode": "1920x1080"
}
]
}Ejecución de aplicaciones Qt
El siguiente ejemplo muestra cómo iniciar una aplicación utilizando el comando rtpSp de VxWorks:
rtpSp("<Qt 6 VxWorks application>", 200, 0x100000, 0, 0x01000000)Depuración de aplicaciones Qt
Para depurar Aplicaciones Qt, debe agregar lo siguiente a su VxWorks VSB:
vxprj vsb config -s -add "_WRS_CONFIG_TCF_GDB_RSP=y"
A su configuración VxWorks VIP agregue:
"INCLUDE_DEBUG_AGENT" "INCLUDE_DEBUG_AGENT_START" "INCLUDE_STANDALONE_SYM_TBL"
Desde la Línea de Comandos
- Inicie la aplicación a depurar en el dispositivo a través de SSH o la conexión serie USB:
rtpSp("<Qt 6 VxWorks application>", 200, 0x100000, 0, 0x01000000) - Inicie el depurador VxWorks en el PC:
vxgdb <binary to debug>
- Listar los procesos en ejecución en el depurador:
monitor ps
- Adjuntar el depurador a la aplicación ya en ejecución:
"attach <id from monitor>"
- Usar comandos GDB para depurar.
Desde Qt Creator
Para depurar desde Qt Creator, consulte Qt Creator: Depuración de aplicaciones C++ en dispositivos VxWorks.
Desde Workbench
- Cree un proyecto CMake Real Time Process.

- Establecer el VSB que tiene la depuración configurada.
- Eliminar set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static") de CMakeLists.txt.
- Añade el código relacionado con Qt CMake al CMakeLists.txt siguiendo Getting started with CMake.
- Antes de
project()añadirunset(CMAKE_TOOLCHAIN_FILE CACHE)y añadirCMAKE_TOOLCHAIN_FILEapuntando al archivo toolchain de Qt6 yQT_CHAINLOAD_TOOLCHAIN_FILEal archivo toolchain de VSB. Por ejemplo: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")
- Construir el Proyecto de aplicación.
- Crear una Nueva Conexión.

- Inicie el proceso RTP para depurar.

- Haga clic en Opciones avanzadas.

- Establecer el tamaño de la pila a 0x100000.

Plugins de entrada de Qt para VxWorks
VxWorks utiliza su propia implementación de libevdev, que tiene una API muy similar a la de Linux, pero difiere en capacidades. Debido a esto Qt implementa plugins de entrada separados para VxWorks para manejar ratón, teclado y pantalla táctil, que están basados en {inputs-linux-device.html}{Linux evdev}, con diferencias que se explican a continuación.
VxMouse
VxMouse utiliza el mismo esquema de configuración que EvdevMouse, excepto por una variable de entorno diferente: QT_QPA_VXEVDEV_MOUSE_PARAMETERS. Además, VxMouse ignora los parámetros nocompress, dejitter y grab.
VxKeyboard
VxKeyboard utiliza el mismo esquema de configuración que EvdevKeyboard, excepto por una variable de entorno diferente: QT_QPA_VXEVDEV_KEYBOARD_PARAMETERS.
VxTouch
VxTouch utiliza el mismo esquema de configuración que EvdevTouch, excepto por las diferentes variables de entorno:
QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERSQT_QPA_VXEVDEV_DEBUG
Además, VxTouch añade dos nuevos parámetros:
| Parámetro | Descripción |
|---|---|
rangex=MIN_X,MAX_X | Anula el punto táctil mínimo y máximo para el eje X |
rangey=MIN_Y,MAX_Y | Anula los puntos táctiles mínimo y máximo para el eje Y |
Limitaciones
Memoria de vídeo
Los sistemas con una cantidad fija de memoria de vídeo dedicada pueden necesitar un cuidado extra antes de ejecutar aplicaciones Qt basadas en Qt Quick o clases como QOpenGLWidget. La configuración por defecto puede ser insuficiente para este tipo de aplicaciones, especialmente cuando se muestran en una pantalla de alta resolución (por ejemplo, Full HD). En este caso, podrían empezar a fallar de forma inesperada. Por lo tanto, se recomienda asegurarse de que hay al menos 128 MB de memoria GPU disponible. Para los sistemas que no tienen una cantidad fija de memoria reservada para la GPU esto no es un problema.
© 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.