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 ウィジェットアプリケーション
- POSIX サポート
- C++17 サポート
Qt Quick 2 アプリケーション
Qt Widgets アプリケーションに必要なすべての機能、および以下の機能:
- OpenGL ES 2.0 用 GPU デバイス (GPUDEV)
サポートされるモジュール
ほとんどのQt 必須モジュールといくつかのアドオンモジュールがサポートされています。
サポートされている必須モジュール
Qt モジュール | サポートされる機能 | 備考 |
---|---|---|
Qt Core | QProcess をサポートしていません。QLocalSocket とQLocalServer は SOCK_SEQPACKET のみをサポートしています。 | |
Qt GUI | ||
Qt ネットワーク | ||
Qt Qml | ||
Qt Quick | ||
Qt Quick コントロール | ||
Qt Quick ダイアログ | ||
Qt クイックレイアウト | ||
Qt Quick テスト | ||
Qt テスト | ||
Qt ウィジェット |
対応アドオン
Qt アドオン | 注意事項 |
---|---|
Qt コンカレント | |
Qt GRPC/Protobuf | |
Qt グラフ | |
Qt 画像フォーマット | |
Qt マルチメディア | |
Qt ネイティブインターフェース | |
Qt OpenGL | |
Qt Quick 3D | |
Qt Quick コンパイラ | |
Qt Quick Effects | |
Qt SQL | |
Qt SVG | |
Qt バーチャルキーボード |
Note: 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 のために予約された固定量のメモリがないシステムでは、これは問題ではありません。
本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。