SDK をインストールしたときの備忘録です。
このサイトで紹介されている内容を現状の環境に合わせて修正しています。
QEMU 用 VxWorks 7 SDK (IA)
https://d13321s3lxgewa.cloudfront.net/downloads/wrsdk-vxworks7-docs/2403/README_qemu.html
インストールした環境は、Windows11 WSL2 を使用しています。
$ cat /etc/os-release
PRETTY_NAME="Ubuntu 24.04.2 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.2 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
導入
VxWorks 7 SDK は、VxWorks アプリケーション開発者専用の開発環境で、次の機能が含まれています。
- ダウンロード可能なカーネルモジュール(DKM)とRTP(リアルタイムプロセス)アプリケーションの両方を構築するために使用できる、clang / LLVMに基づく標準クロスコンパイルツール
- 簡素化されたビルド管理: makefile、cmake、独自ビルド
- ターゲット/アーキテクチャ固有: ターゲットプラットフォームで起動可能な汎用 VxWorks カーネルが含まれています
- アプリケーション開発用のヘッダーファイルとライブラリ
- Wind River デバッガ (wrdbg)
- ドキュメント
このガイドは、VxWorks を実行するプラットフォーム向けのアプリケーション開発を始めるのに役立ちます。新しいアプリケーションの作成にも、VxWorks の機能の探索にもお使いいただけます。
開発環境の設定
まず、https://labs.windriver.comから、選択したプラットフォーム用の VxWorks SDK をダウンロードし、解凍してください。アプリケーションの作成とデバッグに関する追加情報については、解凍した SDK に含まれるドキュメントを参照してください。
OS要件
SDKはLinuxホスト上で動作するように設計されています。このドキュメントの例の一部は、Debian派生OSに特有のものです。
前提条件
ホスト依存関係
Debian 派生版では、次のパッケージをインストールする必要があります。
$ sudo apt install build-essential libc6:i386
開発ホストに FTP サーバーをインストールすると、アプリケーションの展開が容易になり、VxWorks ターゲットからホスト ファイル システムにアクセスできるようになります。
SDK に含まれる VxWorks カーネル イメージのさまざまなランタイム構成に対応するには、pyftpdlib に基づく FTP サーバー オプションの使用が考えられます。
pyftpdlib をインストールします。
$ sudo apt install pipx
$ sudo pipx install pyftpdlib
ユーザ名「target」、パスワード「vxtarget」、現在のユーザのホームのFTPルートを使用してポート21でローカルFTPサーバを起動するには、次のようにします。
$ sudo python3 -m pyftpdlib -p 21 -u target -P vxTarget -i 127.0.0.1 -d $HOME
VxWorksカーネルとSDKで作成されたアプリケーションを実行するには、QEMUをインストールする必要があります。
$ sudo apt install qemu-system-x86
QEMU 上での VxWorks の起動 (IA)
QEMU は、SDK に含まれる VxWorks カーネルを実行し、VxWorks アプリケーションを展開するために使用できます。
まず、Linuxターミナルウィンドウを開き、解凍したVxWorks SDKの場所に移動します。以下のコマンドでQEMUでVxWorksゲストを起動できます。
$ qemu-system-x86_64 -m 512M -kernel vxsdk/bsps/itl_generic_3_0_0_4/vxWorks \
-net nic -net user,hostfwd=tcp::1534-:1534,hostfwd=tcp::2345-:2345 \
-display none -serial stdio -monitor none \
-append "bootline:fs(0,0)host:vxWorks h=10.0.2.2 e=10.0.2.15 u=target pw=vxTarget o=gei0"
開発ホスト上の有効なFTPユーザーに一致するユーザー(u)とパスワード(pw)パラメータの値を設定すると、QEMUで実行されているVxWorksインスタンスからホストファイルシステムにアクセスできるようになります。VxWorksインスタンスはFTPサーバーのルートフォルダにアクセスできるようになります。
アプリケーション開発
まず、Linux ターミナル ウィンドウを開き、解凍した VxWorks SDK の場所に移動します。
SDK を使用する前に、SDK 開発環境を入手します。
$ source sdkenv.sh
コマンドラインからのアプリケーション開発
VxWorksコンパイラドライバ(wr-cc/wr-c++)ユーティリティを使用すると、VxWorksツールチェーンを呼び出して、コマンドラインからリアルタイムプロセス(RTP)アプリケーションをコンパイルできます。SDK開発環境には、様々なコンパイラドライバユーティリティに対応する環境変数(CC、CXX、CPPなど)のセットが含まれています。
手順:
1.C ソースファイル foo.c を作成します。
#include <stdio.h>
int main(void)
{
printf("hello, world!\n");
return 0;
}
2.ソース ファイル foo.c をコンパイルして、リアルタイム プロセス アプリケーションを作成します。
$ wr-cc -rtp foo.c -static -o foo.vxe
または
$ $CC -rtp foo.c -static -o foo.vxe
あるいは、Makefile を作成し、make を呼び出してソース ファイルをコンパイルすることもできます。
all:
$CC -rtp foo.c -static -o foo.vxe
$ make
CMake を使用したアプリケーションの開発
生成されたVxWorks SDKにはデフォルトでCMakeが含まれています。アプリケーション開発者がSDK環境をソースコードとして読み込むと、自動的にCMakeにアクセスできるようになります。CMakeを別途ダウンロード、インストール、設定する必要はありません。VxWorks CMakeを使用すると、生成されたSDKに含まれる既存のCMakeサンプルをビルドしたり、独自のプロジェクトを作成したりできます。
CMakeの例は次のディレクトリにあります。 /examples/rtp/hello_cmake_rtp と /examples/dkm/hello_cmake_dkm
手順: 1. my_project というプロジェクト ディレクトリを作成します。
$ mkdir my_project
1.プロジェクト フォルダーに CMakeLists.txt ファイルを作成します。
2.プロジェクトをビルドするには、次のコマンドを実行します。
$ cmake -D CMAKE_TOOLCHAIN_FILE=${WIND_SDK_HOME}/vxsdk/sysroot/mk/rtp.toolchain.cmake .
注:例ではRTPを使用しています。代わりにDKMプロジェクトをビルドする場合は、ツールチェーン名をdkm.toolchain.cmakeに変更してください。
アプリケーションの実行
ユーザー「target」、パスワード「vxtarget」、現在のユーザーのホームの FTP ルートを使用して、ポート 21 で FTP サーバーを起動します。
$ sudo python -m pyftpdlib -p 21 -u target -P vxTarget -d $HOME &
ターゲット上で VxWorks を起動した後、「cmd」シェルに切り替えると、アプリケーションの場所に簡単に移動できるようになります。
例えば
-> cmd
[vxWorks *]#
アプリケーションを FTP 経由でアクセス可能な場所に配置すると、最小限の構成で VxWorks インスタンスに表示されるようになります。
アプリケーションが $HOME/opt にあり、FTP サーバーが $HOME への FTP アクセスを提供する最小限の構成を使用していると仮定します。
[vxWorks *]# cd opt
[vxWorks *]# ls
opt/./hello
opt/./hello.c
[vxWorks *]# more hello.c
#include <stdio.h>
int main(int argc, char **argv) {
printf("Hello World\n");
return 0;
}
[vxWorks *]# hello
Launching process 'hello' ...
Process 'hello' (process Id = 0xffff8000004bb6e0) launched.
Hello World
Pythonアプリケーションの作成とデプロイ
前提条件
SDK に含まれる VxWorks イメージには、VxWorks 上で Python アプリケーションを実行するためのすべての前提条件が含まれています。
cmd シェルから Python を起動して、Hello World! 文字列を出力します。
[vxWorks *] cd /usr
[vxWorks *]# python3
Launching process 'python3' ...
Process 'python3' (process Id = 0xffff800000641380) launched.
Python 3.8.0 (default, Feb 2 2021, 19:28:52)
[Clang 10.0.1.1 (http://gitlab.devstar.cloud/compilers/llvm/clang.git 5449acbae on vxworks
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print("Hello World!")
Hello World!
>>> print (sys.platform)
vxworks
Pythonスクリプトは次のように実行できます。
[vxWorks *] python3 helloworld.py
Hello World!
注:シェルからPythonを起動する場合は、Pythonを起動する前にrtpSpStackSizeの値を設定する必要がある場合があります(例えば、rtpSpStackSizeを0x1000000に設定します)。詳細については、APIリファレンスのrtpSp()を参照してください。
Rustアプリケーションの作成
Rust 開発環境は、標準のアプリケーション開発環境と同様の方法、つまり SDK 環境ファイルをソースとして取得することによって設定されます。
例えば
$ source <SDK_DIR>/sdkenv.sh
シンプルなHello World Rustプログラムの構築
$ cargo new hello
$ cd hello
$ cargo build
これにより、target/vxworks-target/build-mode ディレクトリに hello.vxe という RTP が作成されます。ここで、vxworks-target は以下にリストされているターゲットの 1 つであり、build-mode は debug または release のいずれかです。
たとえば、次のディレクトリに RTP が表示される場合があります: target/armv7-wrs-vxworks-eabihf/debug/hello.vxe
VxWorks Rust ターゲット:
・ARM 32 ビット: armv7-wrs-vxworks-eabihf
・ARM 64 ビット: aarch64-wrs-vxworks
・Intel 32 ビット: i686-wrs-vxworks
・Intel 64 ビット: x86_64-wrs-vxworks
VxWorksシェルでhello.vxeを実行します。以下の出力が表示されます。
Hello, world!
注:ビルド出力の場所をカスタマイズする方法や、ビルド モードをデバッグからリリースに変更する方法など、cargo の使用に関する詳細については、cargo のドキュメント (https://doc.rust-lang.org/cargo/guide/) を参照してください。