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.7 は VxWorks 24.03 で検証済みです。サポートされているアーキテクチャは ARM-v7 です。

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

VxWorks の要件

Qt ウィジェットアプリケーション

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

Qt Quick 2 アプリケーション

Qt Widgetsアプリケーションに必要なすべての機能、および以下の機能:

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

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

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

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

Qt モジュールサポートされる機能備考
Qt コアQProcess をサポートしていません。QLocalSocketQLocalServer は SOCK_SEQPACKET のみをサポートしています。
Qt GUI
Qt ネットワーク
Qt Qml
Qt Quick
Qt クイックコントロール
Qt クイックダイアログ
Qt クイックレイアウト
Qt クイックテスト
Qt テスト
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 用に Qt6 をインストールする必要があります。さらに、一部のデバイスでは、EGL および OpenGL 2.0 サポートのためにベンダー固有のアダプテーションコードが必要です。

VxWorks イメージの要件

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

i.MX 6 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
EVDEV
EVDEV_LIB
EVDEV_TI_TSC2004_TS
EVDEV_EETI_EXC7200_TS
AUDIO
GPUDEV_FSLVIVGPU
HASH
OPENSSL
RANDOM_ENTROPY_INJECT
IPNET_SSH
USER_MANAGEMENT
ICU

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

変数注意事項
_WRS_CONFIG_EVDEV_OPTIMIZED_MODE
_WRS_CONFIG_EVDEV_DISPLAY_POINT_TRANSLATE

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

変数注意事項
_WRS_CONFIG_RTP_SSPy
_WRS_CONFIG_RTP_STACK_PROTECTORy

i.MX 6 BSPのVIP設定例

詳細については、WindRiver VxWorksのドキュメントを参照してください。

レイヤー備考
BUNDLE_POSIXこのバンドルはQtが必要とするPOSIX関連機能との互換性のために必要です。
INCLUDE_TMP_DIR INCLUDE_RAM_DISK_FORMAT_HRFSQTemporaryFile を使用する場合は、この2つのコンポーネントを含める必要があります。TMP_DIR_SIZE も適切な値に設定してください。
BUNDLE_RTP_DEVELOP
BUNDLE_RTP_DEPLOY
BUNDLE_STANDALONE_SHELL
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_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_USER_DATABASE
INCLUDE_USER_IDENTIFICATION
INCLUDE_VRFS
INCLUDE_VXBUS_SHOW
DRV_TOUCH_SCREEN_TI_TSC2004
DRV_TOUCH_SCREEN_EETI_EXC7200
INCLUDE_FBDEV_FSLIPU_0
INCLUDE_FBDEV_SPLASH
INCLUDE_GPUDEV_FSLVIV_API
INCLUDE_GPUDEV_FSLVIV_API_INIT

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

レイヤーノート
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_DEFAULT131072
TMP_DIR_SIZE614400Qt 内部テストに合格するための最小値
NUM_FILES300
RTP_FD_NUM_MAX300
HRFS_DEFAULT_MAX_FILES300

VxWorks 用 Qt6 のビルド

ホスト用の Qt6 のビルド

VxWorks 用の Qt6 をクロスビルドする場合、クロスビルドと同じソースコードを使用するホストツールを使用するのがベストプラクティスです。そのためには、まずホスト用のQt6をビルドする必要がありますが、サブモジュールのサブセットを限定してビルドする必要があります:

  • qtbase
  • qtdeclarative
  • qtquick3d
  • qtshadertools

ホスト用の Qt6 をビルドするために必要な前提条件がすべて揃っていることを確認してください。詳細はBuilding Qt Sources を参照してください。

Qt6 for host を設定、ビルド、インストールするためのコマンドは以下の通りです:

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

これらのコマンドを実行すると、Qt6 for host が<path_to_qt6_host_installation_dir> にインストールされます。

Qt6 for target のビルド

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

  • Linuxの場合
    cd <VxWorks installation directory>
    ./wrenv.sh -p vxworks
  • Windows
    cd <VxWorks installation directory>
    wrenv -p vxworks

以下は、BD-SL-i.MX6 用のビルド設定例です。ほとんどの VxWorks ボードでは、configure コマンドは非常によく似ています。デフォルトでは、Qt 6 は共有ライブラリを使用するように設定されています。Qt 6 を静的にビルドするには、configure に-static オプションを追加します。

WIND_CC_SYSROOT}環境変数がVxWorks VSBルートディレクトリに設定されていることを確認してください。

./configure \
    -cmake-generator "Ninja" \
    -icu \
    -no-feature-vulkan \
    -platform vxworks-clang \
    -qt-host-path <path_to_qt6_host_installation_dir> \
    -submodules "qtbase,qtdeclarative,qtmultimedia,qtquick3d,qtgraphs,qtimageformats,qtsvg,qtshadertools,qtvirtualkeyboard" \
    -sysroot <path_to_vxworks_vsb_dir>/fsl_imx6_<vsb_version>_VSB \
    -qpa "eglfs" \
    -DQT_QPA_EGLFS_INTEGRATION=eglfs_viv \
    -prefix /sd0:1/qt6rtp \
    -extprefix <path_to_host_dir>/qt6rtp \
    -nomake tools \
    -nomake examples \
    -- \
    -B <target_build_dir> \
    -DCMAKE_TOOLCHAIN_FILE="$WIND_CC_SYSROOT/mk/rtp.toolchain.cmake"

RTP ではなく DKM 用にビルドする場合は、-static オプションを使用し、CMAKE_TOOLCHAIN_FILE の値を次のように変更します。"$WIND_CC_SYSROOT/mk/dkm.toolchain.cmake"

シャドウビルドを使用して Qt 6 をビルドすることをお勧めします。詳細はQt Configure Optionsを参照してください。

コンフィギュレーションが成功すると、Qt6 for VxWorks のビルドとインストールが次のように行われます:

cd <target_build_dir>
ninja
ninja install

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

Qt for VxWorks は EGLFS プラットフォームプラグインをサポートしています。詳しくはEGLFS の設定を参照してください。

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("<Qt6_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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。