VxWorksはウインドリバー社が開発している組込みシステム向けリアルタイムOSです。 規模の大きな商用リアルタイムOSで最も普及しているOSであり、比較的大型の機器で使用されています。 x86、PowerPC、SH-4、ARM、MIPS、SPARC等の様々なCPU上で動作可能です。 DO-178B規格とIEC61508規格に準拠しており、航空・宇宙等の幅広い分野で使われています。
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
以下のコマンドでインストールしてください。
sudo apt-get install tclsh cmake subversion
ORBexpressを使用する場合のみ必要です。
ビルドはコマンドラインの操作により実行します。
Workbenchから、Project Exploreを右クリックしてOpen Development Shellからコマンドラインシェルを起動してください。
通常の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のソースコードを入手してください。
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コンパイラなどは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のビルドも行ってください。
以下のコマンドでソースコードを入手してください。
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.6かvxworks-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を追加する必要があります。
ビルドが完了したら以下の手順で動作確認を行ってください。
このページでは、Workbenchのシミュレータを用いてVxWorks用にビルドしたRTCのカーネルモジュールの動作確認を行う手順を説明します。
以下の手順でシミュレータの設定を行ってください。
WorkbenchのRemote Systemでシミュレータを選択後にconnect 'xxxxx'ボタンを押すとシミュレータと接続します。
WorkbenchのRemote Systemでシミュレータを右クリックして、Download→VxWorks Kernel Taskを選択してください。
Download ConfigurationsウインドウのLaunch Contextタブから、ダウンロードするシステムにシミュレータを選択してください。
Downloadsタブからダウンロードするモジュールを設定します。 Addボタンをクリックしてください。
Addウインドウでrtcd.outのパスを設定後、OKボタンをクリックしてください。 rtcd.outはOpenRTM-aistのビルドディレクトリのutils/rtcd以下に生成されています。
Downloadボタンをクリックするとダウンロードを開始します。
起動するRTCのカーネルモジュールについても同様の手順でダウンロードしてください。
VxWorksシミュレータ上にネームサーバーを起動します。 ネームサーバーはリアルタイムプロセス(RTP)として起動するため、Remote Systemsからシミュレータを右クリックしてRun→VxWorks Real Time Processをクリックしてください。
Run ConfigurationsウインドウのLaunch Contextタブから各種設定を行ってください。
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を登録するようにしてください。
Argumentsにはネームサーバーのポート番号を指定します。
設定が完了後にRunボタンをクリックするとネームサーバーが起動します。
WorkbenchのRemote Systemでシミュレータを右クリックして、Run→VxWorks Kernel Taskを選択してください。
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アドレスは適宜確認してください。
マネージャの起動と同様の手順で起動します。 Entry PointにはRTCを起動する関数を指定します。
Argumentsには何も入力しなくても大丈夫です。
Ubuntuで起動したRTシステムエディタでRTCが起動したかを確認してください。 VxWorksのネームサーバーにはネームサービス接続ボタンをクリック後、表示されたウインドウでIPアドレスを指定してOKをクリックすると接続します。
起動したRTCが登録されているかを確認してください。
RTCの接続、アクティブ化等の手順はUbuntuで動作確認する場合と同じです。
シミュレータ接続後にTarget Consoleウインドウからコマンド入力ができます。
以下のコマンドで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
このページでは、Workbenchのシミュレータを用いてVxWorks用にビルドしたRTCのリアルタイムプロセス(RTP)の動作確認を行う手順を説明します。
以下の手順でシミュレータの設定を行ってください。
WorkbenchのRemote Systemでシミュレータを選択後にconnect 'xxxxx'ボタンを押すとシミュレータと接続します。
VxWorksシミュレータ上にネームサーバーを起動します。 ネームサーバーはリアルタイムプロセス(RTP)として起動するため、Remote Systemsからシミュレータを右クリックしてRun→VxWorks Real Time Processをクリックしてください。
Run ConfigurationsウインドウのLaunch Contextタブから各種設定を行ってください。
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を登録するようにしてください。
Argumentsにはネームサーバーのポート番号を指定します。
設定が完了後にRunボタンをクリックするとネームサーバーが起動します。
ネームサーバーの起動と同じ手順でrtcd.vxeを実行します。 rtcd.vxeはOpenRTM-aistのビルドディレクトリのutils/rtcd以下に生成されています。
Argumentsには何も入力しなくても大丈夫ですが、Ubuntu側のネームサーバーを起動する場合は、Argumentsに-o corba.nameservers:192.168.200.254を追加してください。 Ubuntuのtap0インターフェースのIPアドレスは適宜確認してください。
Ubuntuで起動したRTシステムエディタでRTCが起動したかを確認してください。 VxWorksのネームサーバーにはネームサービス接続ボタンをクリック後、表示されたウインドウでIPアドレスを指定してOKをクリックすると接続します。
起動したRTCが登録されているかを確認してください。
RTCの接続、アクティブ化等の手順はUbuntuで動作確認する場合と同じです。
シミュレータ接続後にTarget Consoleウインドウからコマンド入力ができます。
以下のコマンドで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"
このページでは、PowerPCボード上でVxWorks用にビルドしたRTCのカーネルモジュールの動作確認を行う手順を説明します。
以下の手順でWorkbenchとVxWorksの接続を生成してください。
WorkbenchのRemote Systemでターゲットサーバを選択後にconnect 'xxxxx'ボタンを押すとVxWorksと接続します。
WorkbenchのRemote Systemでターゲットサーバを右クリックして、Download→VxWorks Kernel Taskを選択してください。
Download ConfigurationsウインドウのLaunch Contextタブから、ダウンロードするシステムにターゲットサーバを選択してください。
Downloadsタブからダウンロードするモジュールを設定します。 Addボタンをクリックしてください。
Addウインドウでrtcd.outのパスを設定後、OKボタンをクリックしてください。 rtcd.outはOpenRTM-aistのビルドディレクトリのutils/rtcd以下に生成されています。
Downloadボタンをクリックするとダウンロードを開始します。
起動するRTCのカーネルモジュールについても同様の手順でダウンロードしてください。
WorkbenchのRemote Systemでターゲットサーバを右クリックして、Run→VxWorks Kernel Taskを選択してください。
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アドレスは適宜変更してください。
マネージャの起動と同様の手順で起動します。 Entry PointにはRTCを起動する関数を指定します。
Argumentsには何も入力しなくても大丈夫です。
Ubuntuで起動したRTシステムエディタでRTCが起動したかを確認してください。
起動したRTCが登録されているかを確認してください。
RTCの接続、アクティブ化等の手順はUbuntuで動作確認する場合と同じです。
ただしORBexpressを使用した場合にはデータポートのコネクタ接続時にエンディアンをbigに設定する必要があります。
ターゲットサーバ接続後にWTX Consoleウインドウからコマンド入力ができます。
以下のコマンドで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