
QNX
QNX(キューエヌエックス、またはキューニックス)は主に組み込みシステム向けに販売されている、商用リアルタイムOSです。 POSIX準拠のUNIX系OSで、組込み用OSでありながら一般的なUNIX同様プロセス型のオペレーティング・システムです。 カーネルはマイクロカーネルであり、様々な機能はサーバとしてモジュール化され、用途に応じて必要なサーバのみを動作させるため、コンパクトなシステムを構成することができます。 x86ファミリ、MIPS、PowerPC、SH-4、ARM、StrongARM、XScaleなど様々なCPU上で動作可能であり、さらに機能安全規格 IEC61508 に準拠し認証を取得しているため、安全認証が必要な安全関連系にも利用することができます。
QNXには教育機関向けの無償ライセンスプログラムもあり、大学などでは比較的気軽に利用することができます。
pkgsrc
pkgsrcはUNIX用のパッケージマネジメントシステムの一つであり、FreeBSDのports collectionから派生し、現在はNetBSDのパッケージマネジメント・システムとして利用されています。 pkgsrc自体は、特定のOSに依存するものではなく、NetBSD, Solaris, Linux, Mac OS X, FreeBSD, OpenBSD, IRIX, BSD/OS, AIX, Interix, DragonFlyBSD, OSF/1, HP-UX, QNX, Haiku, MINIX 3, IllumosといったUNIX系の様々なOS上で利用できます。
pkgsrc for QNX
QNXにはパッケージ管理システムはなく、QNXのユーザフォーラムにおいて QNX 用の pkgsrc がメンテナンスされています。
OSをインストール後、pkgsrcをリポジトリからチェックアウトするなどして、システムに配置します。(リポジトリへのアクセスには、QNX forumのアカウントが必要になります。) svnリポジトリからのチェックアウトは大変時間がかかるので、pkgsrc_HEAD650_r396.tgz をダウンロードして利用することもできますが、事前にpkgsrcの最新バージョンをチェックすることをおすすめします。
- QNX アカウント
- QNX フォーラム
- bootstrap
- pkgsrc HEAD650(r396)のアーカイブ(.svn削除済み)
- pkgsrc HEAD650(r396)のアーカイブ(.svn含む)
# cd /usr/ # svn checkout --username <username> http://community.qnx.com/svn/repos/pkgsrc/HEAD_650/pkgsrc # (cd pkgsrc/bootstrap && ./bootstrap) # (cd pkgsrc/misc/figlet && bmake install) # pkg_info または # cd /usr # tar xvzf <somewhere>/pkgsrc_HEAD650_r396.tgz # (cd pkgsrc/bootstrap && ./bootstrap) # (cd pkgsrc/misc/figlet && bmake install) # pkg_info
OpenRTM-aist のpkgsrcによるインストール
pkgsrcはバイナリパッケージによるインストールと、ソースからビルドしてインストールする方法があります。 すべてのパッケージがバイナリで提供されているわけではないので、必要に応じてソースからビルドする必要があります。
OpenRTM.orgのpkgsrcリポジトリ
OpenRTM-aistはopenrtm.orgの以下のURLにおいてバイナリパッケージを提供しています。
OpenRTM-aistで必要なomniORBも、上述の配布サイトにはバイナリパッケージが無いため、openrtm.orgで提供されています。
インストール
インストール方法は以下のとおりです。
- 環境変数 PKG_PATH に http://www.openrtm.org/pub/pkgsrc/packages/QNX/i386/6.5.0/All をセット
- 6.5.0 はQNXのバージョンですので適宜読み替えてください
- pkg_add -v OpenRTM-aist-1.1.0-RELESE でOpenRTM-aistをインストール
- omniORBも同時にインストールされます
# export PKG_PATH=http://www.openrtm.org/pub/pkgsrc/packages/QNX/i386/6.5.0/All # pkg_add -v OpenRTM-aist-1.1.0-RELESE 1.1.0-RELESEの部分は適宜インストールするバージョンに置き換えてください。 Running install with PRE-INSTALL for omniORB-4.1.6. bin/omkdepend bin/omnicpp : omniORBのインストールが始まる man/man1/omniidl.1 Running install with PRE-INSTALL for omniORB-4.1.6. Package omniORB-4.1.6 registered in /var/db/pkg/omniORB-4.1.6 : OpenRTM-aistのインストールが始まる lib/libcoil.so lib/libcoil.la lib/libcoil-1.1.0.so : share/openrtm-1.1/doc/IDLReference-en/html/unionSDOPackage_1_1Numeric.html etc/rtc.conf.sample Package OpenRTM-aist-1.1.0-RELEASE registered in /var/db/pkg/OpenRTM-aist-1.1.0-RELEASE # # pkg_info|grep OpenRTM OpenRTM-aist-1.1.0-RELEASE RT-Middleware and OMG RTC framework
以上でインストールは終了です。
テスト
/usr/pkg/share/openrtm-1.1/examples の下にサンプルプログラムがインストールされています。 これを利用してOpenRTM-aistの動作確認を行います。
ネームサーバの起動
まず、ネームサーバを起動します。
# rtm-naming あるいは # cp /usr/pkg/share/examples/rc.d/omninames /etc/rc.d/ # chmod 755 /etc/rc.d/omninames # /etc/rc.d/omninames
後者では、omninamesの起動スクリプトをrcディレクトリ (/etc/rc.d) にコピーしてからそれを起動しています。 なお、このスクリプトはネームサーバの停止を行うこともできます。
# /etc/rc.d/omninames stop
ConsoleOut
まず、ConsoleOutコンポーネントを起動してみます。 下の例ではホームディレクトリに tmp ディレクトリを作り、そこにコピーしてから実行しています。
# cd ; mkdir tmp ; cd tmp # cp -r /usr/pkg/share/openrtm-1.1/example . # cd example # ./ConsoleOutComp succeed. ================================================= Component Profile ------------------------------------------------- InstanceID: ConsoleOut0 Implementation: ConsoleOut Description: Console output component : ================================================= Port0 (name): ConsoleOut0.in ------------------------------------------------- - properties - port.port_type: DataInPort dataport.data_type: IDL:RTC/TimedLong:1.0 dataport.subscription_type: Any dataport.dataflow_type: push,pull dataport.interface_type: corba_cdr -------------------------------------------------
ConsoleIn
# cd ; cd tmp/example # ./ConsoleInComp Creating a component: "ConsoleIn"....succeed. ================================================= Component Profile ------------------------------------------------- InstanceID: ConsoleIn0 Implementation: ConsoleIn Description: Console input component : ================================================= Port0 (name): ConsoleIn0.out ------------------------------------------------- - properties - port.port_type: DataOutPort dataport.data_type: IDL:RTC/TimedLong:1.0 dataport.subscription_type: flush,new,periodic dataport.dataflow_type: push,pull dataport.interface_type: corba_cdr ------------------------------------------------- : Please input number:
ここで、別のPC上でRTSystemEditorを起動し、ポートを接続、アクティベートします。 ConsoleInのプロンプトに対して数字を入力すると、ConsoleOutから出力されます。



