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.8 は 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 Core | QProcess をサポートしていません。QLocalSocket とQLocalServer は SOCK_SEQPACKET のみをサポートしています。 | |
Qt GUI | ||
Qt Network | ||
Qt Qml | ||
Qt Quick | ||
Qt Quick Controls | ||
Qt Quick ダイアログ | ||
Qt Quick レイアウト | ||
Qt Quick テスト | ||
Qt Test | ||
Qt Widgets |
対応アドオン
Qt アドオン | 注意事項 |
---|---|
Qt Concurrent | |
Qt GRPC/プロトタイプ | |
Qt Graphs | |
Qt Image Formats | |
Qt Multimedia | |
Qt ネイティブインターフェース | |
Qt OpenGL | |
Qt Quick 3D | |
Qt Quick コンパイラ | |
Qt Quick Effects | |
Qt SQL | |
Qt SVG | |
Qt Virtual Keyboard |
注意 : configure ツールを実行する際に -skip <module> オプションを指定することで、サポートされていないモジュールや使用されていないモジュールを明示的にビルドから除外することができます。
プラットフォーム
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のバージョンによって変更される可能性があることに注意してください。
fsl_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_FSLVIVGPU | fsl_imx6専用 |
HASH | |
OPENSSL | |
RANDOM_ENTROPY_INJECT | |
IPNET_SSH | |
USER_MANAGEMENT | |
ICU | |
DRM | itl_generic専用 |
ITLI915 | itl_generic専用 |
LIBDRM | itl_generic指定 |
MESA | itl_generic specific |
以下の設定変数は暗黙的に追加されているので、削除する必要があります:
変数 | 備考 |
---|---|
_WRS_CONFIG_EVDEV_OPTIMIZED_MODE | |
_WRS_CONFIG_EVDEV_DISPLAY_POINT_TRANSLATE | |
_WRS_CONFIG_MESA_MANGLE | itl_generic specific |
以下の変数をコンフィグに追加する必要があります:
変数 | 値 | 備考 |
---|---|---|
_WRS_CONFIG_RTP_SSP | y | |
_WRS_CONFIG_RTP_STACK_PROTECTOR | y | |
_WRS_CONFIG_MESA_GPUDEV_INTEL_GEN90 | y | itl_generic specific |
_WRS_CONFIG_EVDEV_COMPATIBLE_MODE | y | Qt がタッチスクリーンで正しく動作するために必要です。 |
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_HRFS | QTemporaryFile を使いたい場合は、この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 | に必要な 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_0 | fsl_imx6 固有 |
INCLUDE_FBDEV_SPLASH | |
INCLUDE_GPUDEV_FSLVIV_API | fsl_imx6 固有 |
INCLUDE_GPUDEV_FSLVIV_API_INIT | fsl_imx6専用 |
INCLUDE_GPUDEV_ITLGMC_2 | itl_generic指定 |
INCLUDE_I915 | itl_generic specific |
INCLUDE_MESA_FBDEV | イトルジェネリック指定 |
INCLUDE_MESA_GPUDEV_DRI | イットルジェネリック指定 |
INCLUDE_MESA_GPUDEV_DRI_I965 | itl_generic specific |
以下のコンポーネントは暗黙的に追加されているので、削除する必要がある:
レイヤー | 備考 |
---|---|
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_LEN | 9 | 前の例を参照 |
FSLVIV_RTP_COMMAND_BUFFER_QUEUE | 32 | arm' アーキテクチャ用 |
SYS_CLK_RATE | 100 | |
RTP_PTHREAD_STACK_SIZE_DEFAULT | 262144 | qtquick3d のサンプルを動作させるために必要です。PTHREAD_STACK_SIZE_DEFAULT 環境変数でオーバーライドできます。 |
TMP_DIR_SIZE | 614400 | Qt 内部テストに合格するための最小値。 |
NUM_FILES | 300 | |
RTP_FD_NUM_MAX | 300 | |
HRFS_DEFAULT_MAX_FILES | 300 | |
ITLGMC_FBDEV_RESOLUTION_2 | '"1024x768-32"' | Xenarc 706TSA タッチスクリーンを HDMI で接続した場合の例。 |
VxWorks 用 Qt 6 のビルド
ホスト用 Qt 6 のビルド
Qt 6 for VxWorks をクロスビルドする場合、クロスビルドと同じソースコードを使用するホストツールを使用するのがベストプラクティスです。そのためには、まずホスト用の Qt 6 をビルドする必要がありますが、サブモジュールのサブセットを限定してビルドする必要があります:
- qtbase
- qtdeclarative
- qtquick3d
- qtshadertools
Qt 6 for host のビルドに必要な前提条件がすべて揃っていることを確認してください。詳細はBuilding Qt Sources を参照してください。
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> ninja ninja 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 toolchain ファイルを作成する必要があります。BD-SL-i.MX6 デバイス用の CMake toolchain ファイルの例:
# 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}/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}/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)
ターゲットの 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/BDP/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> \
RTP ではなく DKM 用にビルドする場合は、-static
オプションを使用し、CMAKE_TOOLCHAIN_FILE
の値を次のように変更します。"$WIND_CC_SYSROOT/mk/dkm.toolchain.cmake"
シャドウビルドを使用して Qt 6 をビルドすることをお勧めします。詳細はQt Configure Optionsを参照してください。
設定後、Qt 6 for VxWorks を以下のコマンドでビルドしてインストールしてください:
cd <host build directory> ninja ninja 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.8.0/demos/clocks -B <path/to/build/directory> cd <path/to/build/directory> ninja
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_app>", 200, 0x100000, 0, 0x01000000)
制限事項
ビデオメモリ
専用のビデオメモリが一定量しかないシステムでは、Qt Quick やQOpenGLWidget のようなクラスをベースとした 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.