VxWorks 用 Qt

詳細についてはQt Companyまでお問い合わせください: https://www.qt.io/contact-us/

Qt for VxWorks ライセンス

Qt for VxWorks は Qt for Device Creation Professional (DCP) ライセンスでご利用いただけます。詳細はQt Pricing をご覧ください。

サポートされるアーキテクチャと VxWorks リリース

Qt 6.9 は VxWorks 24.03 で検証済みです。

サポートされているアーキテクチャ

  • ARM-v7-BD-SL-i.MX6でテスト。使用 BSP: fsl_imx6
  • x86_64-Intel製NUC6i3SYHでテスト済み。使用BSP:itl_generic

それ以降の Qt リリースに興味がある場合は、Qt プロフェッショナルサービスにお問い合わせください。

VxWorks の要件

Qt Widgets アプリケーション

  • POSIXサポート
  • C++17サポート

Qt Quick 2 アプリケーション

Qt Widgets アプリケーションに必要なすべての機能と、それに加えて以下の機能があります:

  • GPU デバイス (GPUDEV) for OpenGL ES 2.0

サポートされるモジュール

ほとんどの必須Qt モジュールといくつかのアドオンモジュールがサポートされています。

サポートされている必須モジュール

Qt モジュール注意事項
Qt CoreQProcess をサポートしていません。QLocalSocketQLocalServer は SOCK_SEQPACKET のみをサポートしています。
Qt GUI非対応
Qt Network該当なし
Qt Qml該当なし
Qt Quick該当なし
Qt Quick 制御該当なし
Qt Quick ダイアログ該当なし
Qt Quick レイアウト該当なし
Qt Quick テスト該当なし
Qt Test該当なし
Qt Widgets該当なし

対応アドオン

Note: configure ツールを実行する際に -skip <module> オプションを指定することで、サポートされていないモジュールや使用されていないモジュールをビルドから明示的に除外することができます。

プラットフォーム

Qt は RTP アプリケーションで使用するために準備されており、DKM はサポートされていません。

Qt 5.0 のリリースにより、Qt は独自のウィンドウシステム実装を含まなくなりました:QWS はもはやサポートされたプラットフォームではありません。シングルプロセスで使用する場合は、Qt Platform Abstractionが優れたソリューションです。

VxWorksで使えるプラグインが1つあります:EGLFSです。このプラグインが使用できるかどうかは、Qtの設定に依存します。

特定のデバイス用に設定する

VxWorks SDKをインストールし、インストーラとVxWorksイメージのビルドに必要なWindRiverライセンスを取得して環境を準備します。https://gallery.windriver.com/portal/products}から適切なインストーラを検索してください。

特定のデバイス用に Qt をビルドするには、コンパイルホスト、ツールチェーン、および sysroot 用に Qt 6 をインストールする必要があります。さらに、デバイスによっては、EGL と OpenGL 2.0 をサポートするためにベンダー固有のアダプテーションコードが必要です。

VxWorks イメージの要件

Qt for VxWorks では、Qt をコンパイルして正しく動作させるために、特定の VxWorks イメージバンドルとコンポーネントをベースソフトウェアに組み込む必要があります。このリストは、ハードウェア、ソフトウェア、およびプロジェクトのシステム要件に依存するため、決して完全ではありません。しかし、以下の表には、特定の機能(タッチスクリーンのサポートを含む)を動作させるために必須であるものが含まれています。また、これらはVxWorksのバージョンによって変更される可能性があることに注意してください。

ffl_imx6およびitl_generic BSPのVSB設定例

Qtを正しく動作させるには、VSBに以下の機能を追加する必要があります。詳細はWindRiver VxWorks Documentationを参照してください。

機能備考
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_汎用特定
ITLI915一般的な
LIBDRM特定ジェネリック
MESA特定用途向け

以下の設定変数は暗黙的に追加されているので、削除する必要がある:

変数備考
_WRS_CONFIG_EVDEV_OPTIMIZED_MODE該当しない
_WRS_CONFIG_EVDEV_DISPLAY_POINT_TRANSLATE該当なし
_WRS_CONFIG_MESA_MANGLEitl_generic特定

コンフィグに以下の変数を追加する必要があります:

変数備考
_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 Documentationをご覧ください。

バンドル注意事項
BUNDLE_POSIXこのバンドルは、Qt が必要とする POSIX 関連の機能との互換性のために必要です。
BUNDLE_RTP_DEPLOY該当なし
BUNDLE_RTP_DEVELOP該当なし
BUNDLE_STANDALONE_SHELL該当なし
コンポーネント注意事項
INCLUDE_TMP_DIR INCLUDE_RAM_DISK_FORMAT_HRFSQTemporaryFile を使用する場合は、これら2つのコンポーネントを含める必要がある。また、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_I915イトルジェネリック指定
INCLUDE_MESA_FBDEVイトルジェネリック指定
INCLUDE_MESA_GPUDEV_DRIイットルジェネリック指定
INCLUDE_MESA_GPUDEV_DRI_I965特定用途向け

以下のコンポーネントは暗黙的に追加されているので、削除する必要がある:

レイヤー備考
INCLUDE_FTP該当なし
INCLUDE_SHELL_SECURITY該当なし
VIPパラメータ

VxWorks 上で Qt を正しく実行するには、以下のパラメータを追加する必要があります:

パラメータ値の例備考
SEC_VAULT_KEY_ENCRYPTING_PW'"vxTarget"'該当しない
UDB_STORAGE_PATH'"/ram/vxUserDB.txt"'該当なし
UDB_HASH_KEY'"123456789"'該当なし
UDB_HASH_KEY_LEN9例値、前述参照
FSLVIV_RTP_COMMAND_BUFFER_QUEUE32arm」アーキテクチャの場合
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"'Xenarc 706TSA タッチスクリーンを HDMI で接続した場合の例です。
RTP_MEM_FILLTrueデフォルトではこの値はTrue で、Qt が正しく動作するためにはTrue のままである必要があります。

VxWorks 用 Qt 6 のビルド

ホストのビルド

Qtをクロスコンパイルするには、Qtのホストビルドが必要です。これは、ビルド中に特定のツール(mocrccqmlcachegenqsb など)がホストビルドから呼び出されるためです。以下のオプションがあります:

ただし、VxWorks 用にコンパイルする場合にも同じツールが必要になるため、ホスト上でデスクトップターゲッ ト用の Qt をビルドできるようにしておくことをお勧めします。

Configure スクリプトの実行

ホスト上で 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 をビルドする

ビルド環境のセットアップ

configure を実行して Qt 6 をビルドする前に、コマンドプロンプトでVxWorks Development Shell を開く必要があります。

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

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)

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 を静的にビルドするには、configure に-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 Configure Optionsを参照してください。

警告 VxWorks がRTP_MEM_FILL を false として設定されている場合、Qt configure は-DCMAKE_CXX_FLAGS="-DQT_RTP_MEM_FILL=1" の追加引数を必要とします。

設定後、Qt 6 for VxWorks を以下のコマンドでビルドしてインストールしてください:

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

VxWorks デバイス用プラットフォームプラグイン

Qt for VxWorks はネイティブ・ウィンドウの代用として EGLFS プラットフォーム・プラグインをサポートしています。設定についてはEGLFS を参照してください。

Qtアプリケーションのビルド

Qtアプリケーションをビルドするには、QT_VXWORKS_TOOLCHAIN_FILEを環境変数またはdefineとして設定する必要があります。

clocks 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 Real Time Processプロジェクトを作成します。

    cmake RTPプロジェクトを選択する

  2. デバッグが設定されているVSBを設定する。
  3. CMakeLists.txtからset(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")を削除する。
  4. Getting started with CMake に従って、CMakeLists.txt に Qt CMake 関連のコードを追加します。
  5. project() の前にunset(CMAKE_TOOLCHAIN_FILE CACHE) を追加し、CMAKE_TOOLCHAIN_FILE を Qt6 toolchain ファイルに、QT_CHAINLOAD_TOOLCHAIN_FILE を VSB toolchain ファイルに追加します。例えば
    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 に設定します。

    詳細設定

Qt for VxWorks 入力プラグイン

VxWorks は独自の実装であるlibevdev を使用しています。この API は Linux の API と非常によく似ていますが、機能は異なります。このため、Qt はマウス、キーボード、タッチスクリーンを処理するために VxWorks 用の個別の入力プラグインを実装しています。

VxMouse

VxMouse はEvdevMouseと同じ設定スキームを使いますが、環境変数が異なります: 。さらに、 は 、 、 パラメータを無視します。QT_QPA_VXEVDEV_MOUSE_PARAMETERS VxMouse nocompress dejitter grab

VxKeyboard

VxKeyboard は異なる環境変数: を除いて EvdevKeyboard と同じ設定スキームを使用します。QT_QPA_VXEVDEV_KEYBOARD_PARAMETERS

VxTouch

VxTouch は異なる環境変数を除いて EvdevTouch と同じ設定スキームを使用します:

  • QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS
  • QT_QPA_VXEVDEV_DEBUG

さらに、VxTouch は2つの新しいパラメータを追加します:

パラメータパラメータ
rangex=MIN_X,MAX_XX軸のタッチポイントの最小値と最大値を上書きします。
rangey=MIN_Y,MAX_YY軸のタッチポイントの最小値と最大値を上書きします。

制限

ビデオメモリ

専用のビデオメモリが一定量しかないシステムでは、Qt QuickQOpenGLWidget のようなクラスをベースとした Qt アプリケーションを実行する前に、特に注意が必要な場合があります。このようなアプリケーションでは、特に高解像度(例えばフル HD)の画面に表示する場合、デフォルトの設定では不十分な場合があります。このような場合、予期しない方法で失敗し始めるかもしれません。したがって、少なくとも 128 MB の 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.