VxWorks용 Qt

자세한 내용은 Qt Company에 문의: https://www.qt.io/contact-us/

VxWorks용 Qt 라이선스

Qt for VxWorks는 Qt for Device Creation Professional(DCP) 라이선스에 따라 사용할 수 있습니다. 자세한 내용은 Qt 가격을 참조하십시오.

지원되는 아키텍처 및 VxWorks 릴리스

Qt 6.9는 VxWorks 24.03에서 검증되었습니다.

지원되는 아키텍처:

  • ARM-v7 - BD-SL-i.MX6에서 테스트되었습니다. 사용된 BSP: fsl_imx6
  • x86_64 - 인텔 NUC6i3SYH에서 테스트되었습니다. 사용된 BSP: itl_generic

이후 Qt 릴리스에 관심이 있으시면 Qt 프로페셔널 서비스에 문의하시기 바랍니다.

VxWorks 요구 사항

Qt Widgets 애플리케이션

  • POSIX 지원
  • C++17 지원

Qt Quick 2 애플리케이션

Qt Widgets 애플리케이션에 필요한 모든 기능 및 추가 기능:

  • OpenGL ES 2.0용 GPU 장치(GPUDEV)

지원 모듈

대부분의 필수 Qt 모듈과 일부 애드온 모듈이 지원됩니다.

지원되는 필수 모듈

Qt 모듈참고
Qt CoreQProcess 은 지원하지 않습니다. QLocalSocketQLocalServer 은 SOCK_SEQPACKET 만 지원합니다.
Qt GUI해당 없음
Qt Network해당 없음
Qt Qml해당 없음
Qt Quick해당 없음
Qt Quick Controls해당 없음
Qt Quick 대화 상자해당 없음
Qt Quick 레이아웃해당 없음
Qt Quick Test해당 없음
Qt Test해당 없음
Qt Widgets해당 없음

지원되는 애드온

참고: 구성 도구를 실행할 때 -skip <module> 옵션을 사용하여 지원되지 않거나 사용되지 않는 모듈을 빌드에서 명시적으로 제외할 수 있습니다.

플랫폼 참고 사항

Qt는 RTP 애플리케이션에서 사용할 수 있도록 준비되어 있으며 DKM은 지원되지 않습니다.

Qt 5.0이 출시되면서 Qt는 더 이상 자체 창 시스템 구현을 포함하지 않습니다: QWS는 더 이상 지원되지 않는 플랫폼입니다. 단일 프로세스 사용 사례의 경우 Qt 플랫폼 추상화가 우수한 솔루션입니다.

VxWorks에서 사용할 수 있는 플러그인이 하나 있습니다: EGLFS입니다. 이 플러그인의 사용 가능 여부는 Qt의 구성에 따라 다릅니다.

특정 장치에 맞게 구성하기

VxWorks SDK를 설치하고 설치 관리자 및 VxWorks 이미지 빌드에 필요한 WindRiver 라이센스를 획득하여 환경을 준비합니다. https://gallery.windriver.com/portal/products}에서 적합한 설치 관리자를 검색합니다.

특정 장치에 대한 Qt를 빌드하려면 컴파일 호스트, 툴체인 및 시스루트에 대한 Qt 6 설치가 필요합니다. 또한 일부 장치에는 EGL 및 OpenGL 2.0 지원을 위한 공급업체별 적응 코드가 필요합니다.

VxWorks 이미지 요구 사항

VxWorks용 Qt는 Qt가 컴파일되고 제대로 작동하기 위해 특정 VxWorks 이미지 번들 및 구성 요소를 기본 소프트웨어에 임베드해야 합니다. 이 목록은 프로젝트의 하드웨어, 소프트웨어 및 시스템 요구 사항에 따라 달라지므로 완전한 목록은 아닙니다. 그러나 다음 표에는 특정 기능(터치스크린 지원 포함)이 작동하는 데 필수적인 것들이 포함되어 있습니다. 또한 VxWorks 버전에 따라 변경될 수 있습니다.

fsl_imx6 및 itl_generic BSP에 대한 VSB 구성 예시

Qt가 제대로 작동하려면 VSB에 다음 기능을 추가해야 합니다. 자세한 내용은 WindRiver VxWorks 설명서를 참조하십시오.

기능참고
DSI_DSI_KERNEL해당 없음
IPNET_COREIP해당 없음
IPNET_DHCPC해당 없음
SDMMC_DEVICE해당 없음
SDMMC_HOST해당 없음
SDMMC_SDHC해당 없음
SDMMC_STORAGE해당 없음
SERVICE_UN해당 없음
SOCKET해당 없음
USB_EHCI해당 없음
USB_KEYBOARD해당 없음
USB_MOUSE해당 없음
USB_STORAGE해당 없음
USB_TOUCHSCREEN해당 없음
EVDEV해당 없음
EVDEV_LIB해당 없음
EVDEV_TI_TSC2004_TS해당 없음
EVDEV_EETI_EXC7200_TS해당 없음
AUDIO해당 없음
GPUDEV_FSLVIVGPUFSL_IMX6 특정
HASH해당 없음
OPENSSL해당 없음
RANDOM_ENTROPY_INJECT해당 없음
IPNET_SSH해당 없음
USER_MANAGEMENT해당 없음
ICU해당 없음
DRMitl_generic specific
ITLI915itl_generic specific
LIBDRMitl_generic specific
MESAitl_generic specific

다음 구성 변수는 암시적으로 추가되므로 제거해야 합니다:

변수참고
_WRS_CONFIG_EVDEV_OPTIMIZED_MODE해당 없음
_WRS_CONFIG_EVDEV_DISPLAY_POINT_TRANSLATE해당 없음
_WRS_CONFIG_MESA_MANGLEitl_generic specific

구성에 다음 변수를 추가해야 합니다:

변수Value참고
_WRS_CONFIG_RTP_SSPy해당 없음
_WRS_CONFIG_RTP_STACK_PROTECTORy해당 없음
_WRS_CONFIG_MESA_GPUDEV_INTEL_GEN90yitl_generic 특정
_WRS_CONFIG_EVDEV_COMPATIBLE_MODEyQt가 터치스크린에서 제대로 작동하기 위해 필요합니다.

fsl_imx6 및 itl_generic BSP에 대한 VIP 구성 예시

자세한 내용은 WindRiver VxWorks 설명서를 참조하십시오.

번들참고
BUNDLE_POSIX이 번들은 Qt에 필요한 POSIX 관련 기능과의 호환성을 위해 필요합니다.
BUNDLE_RTP_DEPLOY해당 없음
BUNDLE_RTP_DEVELOP해당 없음
BUNDLE_STANDALONE_SHELL해당 없음
컴포넌트참고
INCLUDE_TMP_DIR INCLUDE_RAM_DISK_FORMAT_HRFSQTemporaryFile 을 사용하려면 이 두 구성 요소를 포함해야 합니다. TMP_DIR_SIZE 를 적절한 값으로 설정하는 것도 고려해야 합니다.
DRV_AUDIO_FSL_SSI해당 없음
DRV_AUDIO_FSL_SGTL5000해당 없음
DRV_FSL_SDHC_CTRL해당 없음
DRV_IMX_SDHC_CTRL해당 없음
INCLUDE_EHCI_INIT해당 없음
INCLUDE_FSL_IMX6Q_SABRELITE해당 없음
DRV_MMCSTORAGE_CARD해당 없음
DRV_SDSTORAGE_CARD해당 없음
INCLUDE_AUDIO_LIB_CORE해당 없음
INCLUDE_AUDIO_LIB_WAV해당 없음
INCLUDE_CUSTOM_ENTROPY_ADD해당 없음
INCLUDE_DEBUG_AGENT_START해당 없음
INCLUDE_DEFAULT_TIMEZONE해당 없음
INCLUDE_DISK_UTIL해당 없음
INCLUDE_DOSFS해당 없음
INCLUDE_DSAPARAM_CMD해당 없음
INCLUDE_END해당 없음
INCLUDE_EVDEV_LIB_CORE해당 없음
INCLUDE_EVDEV_LIB_KBD해당 없음
INCLUDE_EVDEV_LIB_KBD_MAP_US해당 없음
INCLUDE_EVDEV_LIB_PTR해당 없음
INCLUDE_EVDEV_LIB_TS해당 없음
INCLUDE_GENDSA_CMD해당 없음
INCLUDE_GENRSA_CMD해당 없음
INCLUDE_GETADDRINFO해당 없음
INCLUDE_GETNAMEINFO해당 없음
INCLUDE_HRFS해당 없음
INCLUDE_HRFS_ACCESS_TIMESTAMP해당 없음
INCLUDE_HRFS_FORMAT해당 없음
INCLUDE_HRFS_HISPEED_WRITE_MODE해당 없음
INCLUDE_IFCONFIG해당 없음
INCLUDE_IO_REALPATH이 구성 요소는 다음에 필요한 리얼패스 기능을 사용하려면 필요합니다. QFileInfo
INCLUDE_IPATTACH해당 없음
INCLUDE_IPCOM_SYSLOGD_CMD해당 없음
INCLUDE_IPCOM_SYSVAR_CMD해당 없음
INCLUDE_IPCOM_USE_RAM_DISK해당 없음
INCLUDE_IPCOM_USE_TIME_CMD해당 없음
INCLUDE_IPDHCPC해당 없음
INCLUDE_IPDNSC해당 없음
INCLUDE_IPD_CMD해당 없음
INCLUDE_IPFTPC해당 없음
INCLUDE_IPFTP_CMD해당 없음
INCLUDE_IPIFCONFIG_CMD해당 없음
INCLUDE_IPNETSTAT_CMD해당 없음
INCLUDE_IPNSLOOKUP_CMD해당 없음
INCLUDE_IPPING_CMD해당 없음
INCLUDE_IPROUTE_CMD해당 없음
INCLUDE_IPTRACE_ROUTE_CMD해당 없음
INCLUDE_IPWRAP_GETHOSTBYADDR해당 없음
INCLUDE_IPWRAP_GETHOSTBYNAME해당 없음
INCLUDE_IPWRAP_GETNAMEINFO해당 없음
INCLUDE_IPWRAP_IFNAME해당 없음
INCLUDE_IPWRAP_ROUTECMD해당 없음
INCLUDE_MMAP해당 없음
INCLUDE_PING해당 없음
INCLUDE_PIPES해당 없음
INCLUDE_POSIX_MAPPED_FILES해당 없음
INCLUDE_POSIX_PIPES해당 없음
INCLUDE_POSIX_PTHREAD_SCHEDULER해당 없음
INCLUDE_POSIX_SHM해당 없음
INCLUDE_RAM_DISK해당 없음
INCLUDE_RAM_DISK_FORMAT_HRFS해당 없음
INCLUDE_RANDOM_NUM_GEN해당 없음
INCLUDE_ROMFS해당 없음
INCLUDE_ROUTECMD해당 없음
INCLUDE_SC_PIPE해당 없음
INCLUDE_SC_POSIX_PIPE해당 없음
INCLUDE_SD_BUS해당 없음
INCLUDE_SECURITY해당 없음
INCLUDE_SEC_KEY_STORE_CMD해당 없음
INCLUDE_SHELL해당 없음
INCLUDE_SSH해당 없음
INCLUDE_STANDALONE_SYM_TBL해당 없음
INCLUDE_STARTUP_SCRIPT해당 없음
INCLUDE_TMP_DIR해당 없음
INCLUDE_UN_COMP해당 없음
INCLUDE_USB_GEN2_KEYBOARD해당 없음
INCLUDE_USB_GEN2_MOUSE해당 없음
INCLUDE_USB_GEN2_STORAGE_INIT해당 없음
INCLUDE_USB_TOUCH_SCREEN해당 없음
INCLUDE_USB_TOUCH_SCREEN_INIT해당 없음
INCLUDE_USER_DATABASE해당 없음
INCLUDE_USER_IDENTIFICATION해당 없음
INCLUDE_VRFS해당 없음
INCLUDE_VXBUS_SHOW해당 없음
DRV_TOUCH_SCREEN_TI_TSC2004해당 없음
DRV_TOUCH_SCREEN_EETI_EXC7200해당 없음
INCLUDE_FBDEV_FSLIPU_0FSL_IMX6 특정
INCLUDE_FBDEV_SPLASH해당 없음
INCLUDE_GPUDEV_FSLVIV_APIfsl_imx6 특정
INCLUDE_GPUDEV_FSLVIV_API_INITfsl_imx6 특정
INCLUDE_GPUDEV_ITLGMC_2itl_generic 특정
INCLUDE_I915itl_generic 특정
INCLUDE_MESA_FBDEVitl_generic 특정
INCLUDE_MESA_GPUDEV_DRIitl_generic 특정
INCLUDE_MESA_GPUDEV_DRI_I965itl_generic 특정

다음 구성 요소는 암시적으로 추가되므로 제거해야 합니다:

Layer참고
INCLUDE_FTP해당 없음
INCLUDE_SHELL_SECURITY해당 없음
VIP 매개변수

Qt가 VxWorks에서 제대로 실행되려면 다음 파라미터를 추가해야 합니다:

파라미터예제 값참고
SEC_VAULT_KEY_ENCRYPTING_PW'"vxTarget"'해당 없음
UDB_STORAGE_PATH'"/ram/vxUserDB.txt"'해당 없음
UDB_HASH_KEY'"123456789"'해당 없음
UDB_HASH_KEY_LEN9예시 값, 이전 참조
FSLVIV_RTP_COMMAND_BUFFER_QUEUE32'암' 아키텍처의 경우
SYS_CLK_RATE100해당 없음
RTP_PTHREAD_STACK_SIZE_DEFAULT262144qtquick3d 예제를 작동시키는 데 필요합니다. PTHREAD_STACK_SIZE_DEFAULT 환경 변수로 재정의할 수 있습니다.
TMP_DIR_SIZE614400Qt 내부 테스트를 통과하기 위한 최소값
NUM_FILES300해당 없음
RTP_FD_NUM_MAX300해당 없음
HRFS_DEFAULT_MAX_FILES300해당 없음
ITLGMC_FBDEV_RESOLUTION_2'"1024x768-32"'HDMI를 통해 연결된 Xenarc 706TSA 터치스크린의 예제 값입니다.
RTP_MEM_FILLTrue기본적으로 이 값은 True 이며, Qt가 제대로 작동하려면 True 을 유지해야 합니다.

VxWorks용 Qt 6 빌드하기

호스트 빌드

Qt를 크로스 컴파일하려면 호스트 빌드를 사용할 수 있어야 합니다. 빌드하는 동안 특정 도구(예: moc, rcc, qmlcachegen, qsb)가 호스트 빌드에서 호출되기 때문입니다. 다음과 같은 옵션이 있습니다:

  • 호스트용Qt 소스 빌드,
  • Qt Online Installer 을 사용하여 호스트 빌드 설치하기.

그러나 호스트에서 데스크톱 타겟용 Qt도 빌드할 수 있는지 확인하는 것이 좋습니다. VxWorks용 컴파일 시에도 동일한 도구가 필요하기 때문입니다.

구성 스크립트 실행

호스트용 Qt 6을 구성, 빌드 및 설치하는 명령은 다음과 같습니다:

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

다음 명령은 <path_to_Qt 6_host_installation_dir> 에 호스트용 Qt 6을 설치합니다.

타겟용 Qt 6 빌드하기

빌드 환경 설정

Qt 6 구성 및 빌드를 실행하기 전에 명령 프롬프트에서 VxWorks 개발 셸을 열어야 합니다.

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

커스텀 CMake 툴체인 파일 준비하기

BSP의 그래픽 라이브러리를 포함하려면 먼저 CMake 툴체인 파일을 생성해야 합니다. BD-SL-i.MX6 디바이스용 CMake 툴체인 파일 예시입니다:

# 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)

인텔 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)

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)

타겟에 대한 Qt 6 구성 실행

다음은 BD-SL-i.MX6에 대한 빌드 구성 예시입니다. 대부분의 VxWorks 보드의 경우 configure 명령은 매우 유사합니다. 기본적으로 Qt 6는 공유 라이브러리를 사용하도록 구성됩니다. Qt 6을 정적으로 빌드하려면 -static 옵션을 추가하여 구성합니다.

WIND_CC_SYSROOT} 환경 변수가 VxWorks VSB 루트 디렉터리로 설정되어 있는지 확인합니다.

./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> \

섀도 빌드를 사용하여 Qt 6을 빌드하는 것이 좋습니다. 자세한 내용은 Qt 구성 옵션을 참조하십시오.

경고: VxWorks가 RTP_MEM_FILL 를 false로 구성한 경우 Qt configure에 -DCMAKE_CXX_FLAGS="-DQT_RTP_MEM_FILL=1" 인수를 추가로 지정해야 합니다.

구성이 완료되면 다음 명령을 사용하여 VxWorks용 Qt 6을 빌드하고 설치합니다:

cd <host build directory>
cmake --build . --parallel
cmake --install .

VxWorks 장치용 플랫폼 플러그인

VxWorks용 Qt는 네이티브 창 대체를 위한 EGLFS 플랫폼 플러그인을 지원합니다. EGLFS의 구성에 대한 자세한 내용을 읽어보십시오.

Qt 애플리케이션 빌드

Qt 애플리케이션을 빌드하려면 QT_VXWORKS_TOOLCHAIN_FILE을 환경 변수 또는 정의로 설정해야 합니다.

시계 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.9.0/demos/clocks -B <path/to/build/directory>
cd <path/to/build/directory>
cmake --build . --parallel

Qt 애플리케이션 실행하기

다음 예제는 공유 라이브러리를 사용하여 Qt 6를 빌드할 때 애플리케이션을 시작하는 방법을 보여줍니다. 정적으로 빌드된 Qt 6의 경우 Qt 라이브러리에 LD_LIBRARY_PATH 환경 변수를 사용할 필요는 없지만, 이 환경 변수는 VxWorks 공유 라이브러리(예: libc 및 OpenGL ES 2.0)의 위치를 가리켜야 합니다. Qt 6 정적 라이브러리에는 필요하지 않습니다.

putenv "LD_LIBRARY_PATH=/sd0:1/lib"
cd "/sd0:1"
rtpSp("<Qt 6 VxWorks application>", 200, 0x100000, 0, 0x01000000)

Qt 응용 프로그램 디버깅

Qt 애플리케이션을 디버깅하려면 VxWorks VSB에 다음을 추가해야 합니다:

vxprj vsb config -s -add "_WRS_CONFIG_TCF_GDB_RSP=y"

VxWorks VIP 구성에 다음을 추가합니다:

"INCLUDE_DEBUG_AGENT"
"INCLUDE_DEBUG_AGENT_START"
"INCLUDE_STANDALONE_SYM_TBL"

명령줄에서

  1. SSH 또는 USB 직렬 연결을 통해 장치에서 디버깅할 애플리케이션을 시작합니다:
    rtpSp("<Qt 6 VxWorks application>", 200, 0x100000, 0, 0x01000000)
  2. PC에서 VxWorks 디버거를 시작합니다:
    vxgdb <binary to debug>
  3. 디버거에서 실행 중인 프로세스를 나열합니다:
    monitor ps
  4. 이미 실행 중인 애플리케이션에 디버거를 연결합니다:
    "attach <id from monitor>"
  5. 디버깅을 위해 GDB 명령을 사용합니다.

워크벤치에서

  1. CMake 실시간 프로세스 프로젝트를 생성합니다.

    cmake RTP 프로젝트 선택

  2. 디버깅이 구성된 VSB를 설정합니다.
  3. CMakeLists.txt에서 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")를 제거합니다.
  4. CMake 시작하기 다음에 CMakeLists.txt에 Qt CMake 관련 코드를 추가합니다.
  5. project() 앞에 unset(CMAKE_TOOLCHAIN_FILE CACHE) 을 추가하고 Qt6 툴체인 파일을 가리키는 CMAKE_TOOLCHAIN_FILE 과 VSB 툴체인 파일을 가리키는 QT_CHAINLOAD_TOOLCHAIN_FILE 을 추가합니다. 예를 들어
    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. 애플리케이션을 빌드합니다 프로젝트.
  7. 새 연결을 생성합니다.

    장치에 연결

  8. 디버깅을 위해 RTP 프로세스를 시작합니다.

    실시간 프로세스 실행/디버그 선택

  9. 고급 옵션을 클릭합니다.

    실행 설정

  10. 스택 크기를 0x100000으로 설정합니다.

    고급 설정

VxWorks용 Qt 입력 플러그인

VxWorks는 Linux와 매우 유사하지만 기능이 다른 API를 가진 libevdev 의 자체 구현을 사용합니다. 이 때문에 Qt는 마우스, 키보드 및 터치스크린을 처리하기 위한 별도의 입력 플러그인을 구현하며, {inputs-linux-device.html}{Linux evdev}에 기반하지만 아래에 설명된 차이점을 가지고 있습니다.

VxMouse

VxMouse 는 환경 변수가 다르다는 점을 제외하면 EvdevMouse와 동일한 구성 체계를 사용합니다: QT_QPA_VXEVDEV_MOUSE_PARAMETERS. 또한 VxMousenocompress, dejittergrab 매개 변수를 무시합니다.

VxKeyboard

VxKeyboard 는 환경 변수가 다르다는 점을 제외하면 EvdevKeyboard와 동일한 구성 체계를 사용합니다: QT_QPA_VXEVDEV_KEYBOARD_PARAMETERS.

VxTouch

VxTouch 는 환경 변수가 다르다는 점을 제외하면 EvdevTouch와 동일한 구성 체계를 사용합니다:

  • QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS
  • QT_QPA_VXEVDEV_DEBUG

또한 VxTouch는 두 개의 새로운 매개 변수를 추가합니다:

매개 변수설명
rangex=MIN_X,MAX_XX축의 터치 포인트 최소 및 최대를 재정의합니다.
rangey=MIN_Y,MAX_YY축의 터치 포인트 최소 및 최대를 재정의합니다.

제한 사항

비디오 메모리

전용 비디오 메모리가 고정되어 있는 시스템에서는 Qt Quick 또는 QOpenGLWidget 과 같은 클래스에 기반한 Qt 어플리케이션을 실행하기 전에 각별한 주의가 필요할 수 있습니다. 특히 이러한 애플리케이션이 고해상도(예: 풀 HD) 화면에 표시되는 경우 기본 설정이 충분하지 않을 수 있습니다. 이 경우 예기치 않은 방식으로 실패할 수 있습니다. 따라서 최소 128MB의 GPU 메모리가 있는지 확인하는 것이 좋습니다. GPU를 위해 예약된 메모리가 고정되어 있지 않은 시스템에서는 문제가 되지 않습니다.

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