VxWorksへのインストール

VxWorks

VxWorksはウインドリバー社が開発している組込みシステム向けリアルタイムOSです。 規模の大きな商用リアルタイムOSで最も普及しているOSであり、比較的大型の機器で使用されています。 x86、PowerPC、SH-4、ARM、MIPS、SPARC等の様々なCPU上で動作可能です。 DO-178B規格とIEC61508規格に準拠しており、航空・宇宙等の幅広い分野で使われています。

Wind River Workbench

Wind River WorkbenchはVxWorksのコンパイル、デバッグ等をGUIで実行する統合開発環境です。

このページではVxWorksにOpenRTM-aist(C++版)を導入する手順を説明します。

環境構築

ホストPCはUbuntu 14.04(もしくは16.04)を想定しています。 Windowsには今後対応する予定です。

ホストPCに以下のソフトウェアをインストールしてください。

ウインドリバー社から購入してインストールしてください。

Workbenchは32bit環境で動作するため、64bitのUbuntuの場合はi386版libc6パッケージをインストールしてください。

 sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

  • tclsh
  • cmake
  • subversion

以下のコマンドでインストールしてください。

 sudo apt-get install tclsh cmake subversion

ORBexpressを使用する場合のみ必要です。

ビルド

ビルドはコマンドラインの操作により実行します。

Workbenchから、Project Exploreを右クリックしてOpen Development Shellからコマンドラインシェルを起動してください。


command-line.png


通常のUbuntuのターミナル上でビルドする場合は、以下の手順で環境変数を設定してください。 Workbenchで起動したコマンドラインシェルを用いる場合は環境変数は設定済みのため、次の手順に進んでください。

環境変数の設定

以下の環境変数を設定してください。

変数名
WIND_HOME /home/openrtm/WindRiver
WIND_USR ${WIND_HOME}/vxworks-6.9/target/usr
WRVX_COMPBASE ${WIND_HOME}/components
WIND_BASE ${WIND_HOME}/vxworks-6.9
WIND_HOST_TYPE x86-linux2
WIND_GNU_BASE ${WIND_HOME}/gnu/4.3.3-vxworks-6.9/${WIND_HOST_TYPE}
WIND_FOUNDATION_PATH ${WIND_HOME}/workbench-3.3/foundation

WIND_HOMEはWorkbenchをインストールしたディレクトリにより適宜変更してください。

 export WIND_HOME=/home/openrtm/WindRiver
 export WIND_USR=${WIND_HOME}/vxworks-6.9/target/usr
 export WRVX_COMPBASE=${WIND_HOME}/components
 export WIND_BASE=${WIND_HOME}/vxworks-6.9
 export WIND_HOST_TYPE=x86-linux2
 export WIND_GNU_BASE=${WIND_HOME}/gnu/4.3.3-vxworks-6.9/${WIND_HOST_TYPE}
 export WIND_FOUNDATION_PATH=${WIND_HOME}/workbench-3.3/foundation

コンパイラの実行のために共有ライブラリパスの設定を行ってください。

 export LD_LIBRARY_PATH=${WIND_HOME}/lmapi-5.0/x86-linux2/lib:${WIND_FOUNDATION_PATH}/${WIND_HOST_TYPE}/lib:${LD_LIBRARY_PATH}

omniORBのビルド

omniORBを使用する場合は、omniORBのソースコードのビルドが必要になります。 omniORBを使用しない場合は、次の手順に進んでください。

ソースコード入手

以下のコマンドでomniORBのソースコードを入手してください。

 wget https://jaist.dl.sourceforge.net/project/omniorb/omniORB/omniORB-4.2.2/omniORB-4.2.2.tar.bz2
 tar xf omniORB-4.2.2.tar.bz2

修正パッチ適用

VxWorks 6.6、6.9対応の修正パッチを適用します。

 wget http://svn.openrtm.org/omniORB/trunk/vxworks/omniORB-4.2.2-vxworks.patch
 patch -p1 -d omniORB-4.2.2 < omniORB-4.2.2-vxworks.patch

IDLコンパイラなどのビルド

IDLコンパイラなどはUbuntu上で動作する必要があります。 以下の手順でUbuntu用にomniORBをビルドしてください。

 cd omniORB-4.2.2
 mkdir build
 cd build
 ../configure
 make
 cd ..

クロスコンパイル

VxWorks用にomniORBをビルドします。

 sed -i '1s/^/platform = ${VXWORKS_PLATFORM}\n/' config/config.mk
 cd src
 make export

ただし、VXWORKS_PLATFORMには動作環境に合ったものを入力するようにしてください。

VXWORKS_PLATFORM CPU VxWorksのバージョン 実装方法
powerpc_vxWorks_kernel_6.6 PowerPC 6.6 カーネルモジュール
powerpc_vxWorks_RTP_6.6 PowerPC 6.6 RTP
powerpc_vxWorks_kernel_6.9 PowerPC 6.9 カーネルモジュール
powerpc_vxWorks_RTP_6.9 PowerPC 6.9 RTP
simlinux_vxWorks_kernel_6.6 Linux上のシミュレータ 6.6 カーネルモジュール
simpentium_vxWorks_RTP_6.6 Linux上のシミュレータ 6.6 RTP
simlinux_vxWorks_kernel_6.9 Linux上のシミュレータ 6.9 カーネルモジュール
simpentium_vxWorks_RTP_6.9 Linux上のシミュレータ 6.9 RTP

※カーネルモジュールのビルドの場合にはネームサーバー等は生成しません。VxWorksでネームサーバーを起動する場合はRTPのビルドも行ってください。

OpenRTM-aistのビルド

ソースコードの入手

以下のコマンドでソースコードを入手してください。

 svn co http://svn.openrtm.org/OpenRTM-aist/trunk/OpenRTM-aist/

コンパイル

以下のコマンドでコンパイルを開始します。

 cd OpenRTM-aist/
 python convert_character_code.py ./ vxworks euc_jp
 mkdir src/lib/coil/common/coil
 cp src/lib/coil/common/*.* src/lib/coil/common/coil/
 cp build/yat.py utils/rtm-skelwrapper/
 mkdir build_vxworks
 cd build_vxworks/
 cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_FILE} -DVX_VERSION=${VX_VERSION} -DORB_ROOT=${ORB_ROOT} -DOMNI_VERSION=${OMNI_VERSION} -DCORBA=${CORBA} -DVX_CPU_FAMILY=${ARCH} ..
 make

CMakeのオプションには以下を指定してください。

TOOLCHAIN_FILE VxWorks 6.6(カーネルモジュール、PowerPC)の場合は../Toolchain-vxworks6.6-Linux.cmake、それ以外の場合は../Toolchain-vxworks6.cmake
VX_VERSION vxworks-6.6vxworks-6.9
ORB_ROOT omniORBのディレクトリ(例:/home/openrtm/omniORB-4.2.2)
VX_CPU_FAMILY ppc(PowerPC)、simlinux(カーネルモジュール、シミュレータ)、simpentium(RTP、シミュレータ)
OMNI_VERSION omniORBのバージョン(40、41、42)、omniORBを使用しない場合は不要
CORBA omniORB、もしくはORBexpress

※RTPの場合はcmakeコマンドに-DRTP=ONを追加する必要があります。

動作確認

ビルドが完了したら以下の手順で動作確認を行ってください。

OpenRTM-aist動作確認(VxWorks、カーネルモジュール、シミュレータ利用の場合)

このページでは、Workbenchのシミュレータを用いてVxWorks用にビルドしたRTCのカーネルモジュールの動作確認を行う手順を説明します。

シミュレータの設定

以下の手順でシミュレータの設定を行ってください。

シミュレータの接続

WorkbenchのRemote Systemでシミュレータを選択後にconnect 'xxxxx'ボタンを押すとシミュレータと接続します。


sim5.png


カーネルモジュールのロード

WorkbenchのRemote Systemでシミュレータを右クリックして、DownloadVxWorks Kernel Taskを選択してください。


load_module.png


Download ConfigurationsウインドウのLaunch Contextタブから、ダウンロードするシステムにシミュレータを選択してください。


Launch_context.png


Downloadsタブからダウンロードするモジュールを設定します。 Addボタンをクリックしてください。


downloads.png


Addウインドウでrtcd.outのパスを設定後、OKボタンをクリックしてください。 rtcd.outはOpenRTM-aistのビルドディレクトリのutils/rtcd以下に生成されています。

  • 例:/home/openrtm/OpenRTM-aist/build_vxworks/utils/rtcd/rtcd.out


downloads2.png


Downloadボタンをクリックするとダウンロードを開始します。


download.png


起動するRTCのカーネルモジュールについても同様の手順でダウンロードしてください。

  • 例(ConsoleIn):/home/openrtm/OpenRTM-aist/build_vxworks/examples/SimpleIO/ConsoleIn.out
  • 例(ConsoleOut):/home/openrtm/OpenRTM-aist/build_vxworks/examples/SimpleIO/ConsoleOut.out

RTC実行

ネームサーバー起動

VxWorksシミュレータ上にネームサーバーを起動します。 ネームサーバーはリアルタイムプロセス(RTP)として起動するため、Remote Systemsからシミュレータを右クリックしてRunVxWorks Real Time Processをクリックしてください。


rtp.png


Run ConfigurationsウインドウのLaunch Contextタブから各種設定を行ってください。

  • 実行するシステムをシミュレータに設定
  • omniNames.outのパス設定
  • コマンドライン引数の設定

omniNames.outはomniORBのRTPのビルドディレクトリに生成されています。 カーネルモジュールのビルドディレクトリには生成されないため、omniORBはRTPについてもビルドを行ってください。 共有ライブラリのパスにlibc.so.1が無い場合はエラーとなるため、WorkbenchからomniNames.outのディレクトリにコピーしてください。

 cp $WIND_BASE/target/lib/usr/root/SIMPENTIUMgnu/bin/libc.so.1 /home/openrtm/omniORB-4.2.2/bin/simpentium_vxWorks_RTP_6.9/

RTPについてビルドできない場合は、VxWorksでネームサーバーは起動せずにUbuntu上のネームサーバーにRTCを登録するようにしてください。

  • 例:/home/openrtm/omniORB-4.2.2/bin/simpentium_vxWorks_RTP_6.9/omniNames.out

Argumentsにはネームサーバーのポート番号を指定します。

  • 例:-start 2809

設定が完了後にRunボタンをクリックするとネームサーバーが起動します。


nameserver.png


マネージャ起動

WorkbenchのRemote Systemでシミュレータを右クリックして、RunVxWorks Kernel Taskを選択してください。


run_task.png


Run Configurationsウインドウで各種設定を行います。 Entry Pointにはrtcd_mainと入力してください。 Argumentsには"-o manager.shutdown_on_nortcs:NO -o manager.shutdown_auto:NO"を設定してください。 Runボタンを押すとマネージャが起動します。

※Ubuntu側のネームサーバーを起動する場合は、Argumentsに-o corba.nameservers:192.168.200.254を追加してください。 Ubuntuのtap0インターフェースのIPアドレスは適宜確認してください。


run_task2.png


RTCの起動

マネージャの起動と同様の手順で起動します。 Entry PointにはRTCを起動する関数を指定します。

  • 例(ConsoleIn):consolein_main
  • 例(ConsoleOut):consoleout_main

Argumentsには何も入力しなくても大丈夫です。

Ubuntuで起動したRTシステムエディタでRTCが起動したかを確認してください。 VxWorksのネームサーバーにはネームサービス接続ボタンをクリック後、表示されたウインドウでIPアドレスを指定してOKをクリックすると接続します。


ns1.png



ns2.png


起動したRTCが登録されているかを確認してください。


ns3.png


RTCの接続、アクティブ化等の手順はUbuntuで動作確認する場合と同じです。

コマンドラインによる操作について

シミュレータ接続後にTarget Consoleウインドウからコマンド入力ができます。


sim6.png


以下のコマンドでRTCの動作確認ができます。 Workbench、omniORB、openRTM-aistのパスは適宜変更してください。

 cd "/home/openrtm/openrtm-build/omniORB/omniORB_69_rtp_sim/omniORB-4.2.2/bin/simpentium_vxWorks_RTP_6.9"
 cp "/home/openrtm/WindRiver/vxworks-6.9/target/lib/usr/root/SIMPENTIUMgnu/bin/libc.so.1","./"
 rtpSp "./omniNames.out -start 2809"
 
 cd "/home/openrtm/openrtm-build/OpenRTM/OpenRTM_69_kernel_sim/OpenRTM-aist/build_vxworks/utils/rtcd"
 ld<rtcd.out
 cd "/home/openrtm/openrtm-build/OpenRTM/OpenRTM_69_kernel_sim/OpenRTM-aist/build_vxworks/examples/SimpleIO"
 ld<ConsoleIn.out
 
 taskSpawn "rtcd_main",100,67108864,1000000,rtcd_main,"-o","manager.shutdown_on_nortcs:NO","-o","manager.shutdown_auto:NO"
 taskSpawn "consolein_main",100,0,1000000,consolein_main

OpenRTM-aist動作確認(VxWorks、RTP、シミュレータ利用の場合)

このページでは、Workbenchのシミュレータを用いてVxWorks用にビルドしたRTCのリアルタイムプロセス(RTP)の動作確認を行う手順を説明します。

シミュレータの設定

以下の手順でシミュレータの設定を行ってください。

シミュレータの接続

WorkbenchのRemote Systemでシミュレータを選択後にconnect 'xxxxx'ボタンを押すとシミュレータと接続します。


 /ja/node/6374


RTC実行

ネームサーバー起動

VxWorksシミュレータ上にネームサーバーを起動します。 ネームサーバーはリアルタイムプロセス(RTP)として起動するため、Remote Systemsからシミュレータを右クリックしてRunVxWorks Real Time Processをクリックしてください。


 /ja/node/6374


Run ConfigurationsウインドウのLaunch Contextタブから各種設定を行ってください。

  • 実行するシステムをシミュレータに設定
  • omniNames.outのパス設定
  • コマンドライン引数の設定

omniNames.outはomniORBのビルドディレクトリに生成されています。 共有ライブラリのパスにlibc.so.1が無い場合はエラーとなるため、WorkbenchからomniNames.outのディレクトリにコピーしてください。

 cp $WIND_BASE/target/lib/usr/root/SIMPENTIUMgnu/bin/libc.so.1 /home/openrtm/omniORB-4.2.2/bin/simpentium_vxWorks_RTP_6.9/

RTPについてビルドできない場合は、VxWorksでネームサーバーは起動せずにUbuntu上のネームサーバーにRTCを登録するようにしてください。

  • 例:/home/openrtm/omniORB-4.2.2/bin/simpentium_vxWorks_RTP_6.9/omniNames.out

Argumentsにはネームサーバーのポート番号を指定します。

  • 例:-start 2809

設定が完了後にRunボタンをクリックするとネームサーバーが起動します。


 /ja/node/6374


RTCの起動

ネームサーバーの起動と同じ手順でrtcd.vxeを実行します。 rtcd.vxeはOpenRTM-aistのビルドディレクトリのutils/rtcd以下に生成されています。

  • 例(ConsoleIn):/home/openrtm/OpenRTM-aist/build_vxworks/examples/SimpleIO/ConsoleIn.vxe
  • 例(ConsoleOut):/home/openrtm/OpenRTM-aist/build_vxworks/examples/SimpleIO/ConsoleOut.vxe

Argumentsには何も入力しなくても大丈夫ですが、Ubuntu側のネームサーバーを起動する場合は、Argumentsに-o corba.nameservers:192.168.200.254を追加してください。 Ubuntuのtap0インターフェースのIPアドレスは適宜確認してください。

Ubuntuで起動したRTシステムエディタでRTCが起動したかを確認してください。 VxWorksのネームサーバーにはネームサービス接続ボタンをクリック後、表示されたウインドウでIPアドレスを指定してOKをクリックすると接続します。


 /ja/node/6374



 /ja/node/6374


起動したRTCが登録されているかを確認してください。


 /ja/node/6374


RTCの接続、アクティブ化等の手順はUbuntuで動作確認する場合と同じです。

コマンドラインによる操作について

シミュレータ接続後にTarget Consoleウインドウからコマンド入力ができます。


 /ja/node/6374


以下のコマンドでRTCの動作確認ができます。 Workbench、omniORB、openRTM-aistのパスは適宜変更してください。

 cd "/home/openrtm/openrtm-build/omniORB/omniORB_69_rtp_sim/omniORB-4.2.2/bin/simpentium_vxWorks_RTP_6.9"
 cp "/home/openrtm/WindRiver/vxworks-6.9/target/lib/usr/root/SIMPENTIUMgnu/bin/libc.so.1","./"
 rtpSp "./omniNames.out -start 2809"
 
 cd "/home/openrtm/openrtm-build/OpenRTM/OpenRTM_69_rtp_sim/OpenRTM-aist/build_vxworks/examples/SimpleIO"
 cp "/home/openrtm/WindRiver/vxworks-6.9/target/lib/usr/root/SIMPENTIUMgnu/bin/libc.so.1","./"
 rtpSp "./ConsoleOutComp.vxe"

OpenRTM-aist動作確認(VxWorks、カーネルモジュール、PowerPC搭載ボード利用の場合)

このページでは、PowerPCボード上でVxWorks用にビルドしたRTCのカーネルモジュールの動作確認を行う手順を説明します。

WorkbenchとVxWorksとの接続

以下の手順でWorkbenchとVxWorksの接続を生成してください。

WorkbenchのRemote Systemでターゲットサーバを選択後にconnect 'xxxxx'ボタンを押すとVxWorksと接続します。


target02.png


カーネルモジュールのロード

WorkbenchのRemote Systemでターゲットサーバを右クリックして、DownloadVxWorks Kernel Taskを選択してください。


server1.png


Download ConfigurationsウインドウのLaunch Contextタブから、ダウンロードするシステムにターゲットサーバを選択してください。


server5.png


Downloadsタブからダウンロードするモジュールを設定します。 Addボタンをクリックしてください。


server6.png


Addウインドウでrtcd.outのパスを設定後、OKボタンをクリックしてください。 rtcd.outはOpenRTM-aistのビルドディレクトリのutils/rtcd以下に生成されています。

  • 例:/home/openrtm/OpenRTM-aist/build_vxworks/utils/rtcd/rtcd.out


server3.png


Downloadボタンをクリックするとダウンロードを開始します。


 /ja/node/6374


起動するRTCのカーネルモジュールについても同様の手順でダウンロードしてください。

  • 例(ConsoleIn):/home/openrtm/OpenRTM-aist/build_vxworks/examples/SimpleIO/ConsoleIn.out
  • 例(ConsoleOut):/home/openrtm/OpenRTM-aist/build_vxworks/examples/SimpleIO/ConsoleOut.out

RTC実行

マネージャ起動

WorkbenchのRemote Systemでターゲットサーバを右クリックして、RunVxWorks Kernel Taskを選択してください。


server2.png


Run Configurationsウインドウで各種設定を行います。 Entry Pointにはrtcd_mainと入力してください。 Argumentsには"-o manager.shutdown_on_nortcs:NO -o manager.shutdown_auto:NO -o corba.nameservers:172.30.1.1"を設定してください。ネームサーバーはVxWorksでは起動しないため、Ubuntu上のネームサーバーにRTCを登録します。 ※ORBexpressを使用する場合はエンドポイントの設定corba.endpoints:172.30.1.20:1234も追加してください。 Runボタンを押すとマネージャが起動します。 IPアドレスは適宜変更してください。


server4.png


RTCの起動

マネージャの起動と同様の手順で起動します。 Entry PointにはRTCを起動する関数を指定します。

  • 例(ConsoleIn):consolein_main
  • 例(ConsoleOut):consoleout_main

Argumentsには何も入力しなくても大丈夫です。

Ubuntuで起動したRTシステムエディタでRTCが起動したかを確認してください。

起動したRTCが登録されているかを確認してください。


 /ja/node/6374


RTCの接続、アクティブ化等の手順はUbuntuで動作確認する場合と同じです。

ただしORBexpressを使用した場合にはデータポートのコネクタ接続時にエンディアンをbigに設定する必要があります。

コマンドラインによる操作について

ターゲットサーバ接続後にWTX Consoleウインドウからコマンド入力ができます。


target03.png


以下のコマンドでRTCの動作確認ができます。 Workbench、omniORB、openRTM-aistのパス、UbuntuのIPアドレスは適宜変更してください。

 cd "/home/openrtm/openrtm-build/OpenRTM/OpenRTM_69_kernel_sim/OpenRTM-aist/build_vxworks/utils/rtcd"
 ld<rtcd.out
 cd "/home/openrtm/openrtm-build/OpenRTM/OpenRTM_69_kernel_sim/OpenRTM-aist/build_vxworks/examples/SimpleIO"
 ld<ConsoleIn.out
 
 taskSpawn "rtcd_main",100,67108864,1000000,rtcd_main,"-o","manager.shutdown_on_nortcs:NO","-o","manager.shutdown_auto:NO","-o","corba.nameservers:172.30.1.1"
 taskSpawn "consolein_main",100,0,1000000,consolein_main

OpenRTM-aist動作確認(VxWorks、RTP、PowerPC搭載ボード利用の場合)