h1. QNXビルド環境に関するメモ(QNX版) 1.準備 1.1.QNX開発環境とQNX仮想マシンのVMwareイメージの取得 1.1.1.myQNXアカウントの取得 QNXからのソフトウエアのダウンロードには、myQNXにアカウントを登録してライセンスを取得しないと ダウンロードできないので下記のアカウントを登録する。 ・myQNXのアカウント作成 Email:openrtm@openrtm.org PW:4070penrtm1635 ※上記のアカウントで取得したライセンスは30日間限定なので現在は使えません。 1.1.2.QNX開発環境の取得 安藤さんのところで取得したqnx-setup-201801181542-lin.runをLinux(Ubuntu)にインストールする。
$ $ sudo qnx-setup-201801181542-lin.run $インストールするとホーム配下のディレクトリにqnxのディレクトリが作成された事を確認する。 qnx/qnxsoftwarecenterのディレクトリに入りqnxsoftwarecenterを実行する。 QNX Software Centerが起動されることを確認する。 起動後の最初の画面でInstall New Packagesをクリックする。 次の画面でAvailableタブをクリックする。 Availableタブ配下にあるQNX Software Development Platform 7.0を選択し右下のInstallをクリックしインストールをする。 ホーム配下のディレクトリにqnx700のディレクトリが作成された事を確認する。 1.1.3.QNX仮想マシンのVMwareイメージの取得 Availableタブ配下にあるReferrence ImagesをクリックしToolsをクリックする。 QNX SDP 7.0 x86-64 virtual machine for VMwareを選択し右下のInstallをクリックしインストールをする。 qnx700のディレクトリ配下にvmimagesのディレクトリが作成された事を確認する。 1.1.4.依存ライブラリの取得 OpenRTM-aist-1.1.2は以下のライブラリに依存していますのでネットかダウンロードして下さい 1.libuuid-1.0.3.tar.gz 2.omniORB-4.1.6.tar.bz2 3.Python-2.7.14.tar ※linux版のOpenRTM-aist-1.1.2を構築してない場合は必要かもしれません 2.依存ライブラリのビルド 2.1.libuuid-1.0.3
$ $ tar -zxvf tmp/libuuid-1.0.3.tar.gz $ cd libuuid-1.0.3 $ QNXには以下のヘッダが無いので/usr/include/x86_64-linux-gnuから持ってくる。 errno.h sys/syscall.h asm/unistd.h asm/unistd_64.h bits/syscall.h $ $ mkdir sys $ cp /usr/include/x86_64-linux-gnu/sys/syscall.h sys $ mkdir asm $ cp /usr/include/x86_64-linux-gnu/asm/unistd.h asm $ cp /usr/include/x86_64-linux-gnu/asm/unistd_64.h asm $ mkdir bits $ cp /usr/include/x86_64-linux-gnu/bits/syscall.h bits $ $ source ~/qnx700/qnxsdp-env.sh $ $ ./configure CC="qcc -V5.4.0,gcc_ntox86_64_gpp" CXX="q++ -V5.4.0,gcc_ntox86_64_gpp" AR=ntox86_64-ar RANLIB=ntox86_64-ranlib --host=x86_64-unknown-linux-gnu $ $ make $ $ make install DESTDIR=/home/openrtm/libuuid-1.0.3_install $ make installまで正常終了したらlibuuid-1.0.3_install/usr/local配下をQNX配下にコピーする。 $ $ cd ../libuuid-1.0.3_install/usr/local $ cp -pr include /home/openrtm/qnx700/target/qnx7/usr $ cp -pr lib /home/openrtm/qnx700/target/qnx7/x86_64/usr $ $2.2.omniORB-4.1.6
$ $ tar -jxvf omniORB-4.1.6.tar.bz2 $ cd omniORB-4.1.6 $ source ~/qnx700/qnxsdp-env.sh $ $ ./configure CC="qcc -V5.4.0,gcc_ntox86_64_gpp" CXX="q++ -V5.4.0,gcc_ntox86_64_gpp" AR=ntox86_64-ar RANLIB=ntox86_64-ranlib --host=x86_64-unknown-linux-gnu $ ./configure CC=x86_64-pc-nto-qnx7.0.0-gcc-5.4.0 CXX=x86_64-pc-nto-qnx7.0.0-g++-5.4.0 AR=x86_64-pc-nto-qnx7.0.0-gcc-ar-5.4.0 RANLIB=x86_64-pc-nto-qnx7.0.0-gcc-ranlib-5.4.0 --host=x86_64-unknown-linux-gnu $ $ make clean $ make CC=gcc -C src/tool/omniidl/cxx/cccp $ make CXX=g++ -C src/tool/omniidl/cxx ※ここで、python2.7のヘッダ関連のエラーが出る時はpython2.7(Python-2.7.14)パッケージをLinux環境でmake & make installして下さい $ make CC=gcc -C src/tool/omkdepend $ makeファイルとソースの修正 $ $ gedit mk/beforeauto.mk $ 770行目 ########################################################################### # # OS dependencies # # So much for autoconfiguration... ;-) ################### ifdef Linux IMPORT_CPPFLAGS += -D__linux__ OMNITHREAD_POSIX_CPPFLAGS = -DNoNanoSleep -DPthreadDraftVersion=10 OMNITHREAD_CPPFLAGS = -D_REENTRANT #OMNITHREAD_LIB += -lpthread <--- ここを変更 OMNITHREAD_LIB += -lsocket endif $ $ gedit src/lib/omnithread/posix.cc $ 82行目 #include3.OpenRTM-aist-1.1.2のビルド#include #include #include #include <--- 追加 #include <----- 追加 #if (defined(__GLIBC__) && __GLIBC__ >= 2) || defined(__SCO_VERSION__) || defined(__aix__) || defined (__cygwin__) || defined(__darwin__) || defined(__macos__) // typedef of struct timeval and gettimeofday(); #include #include #endif $ $ make $ make install DESTDIR=/home/openrtm/util/omniORB-4.1.6_install $ make installまで正常終了したらomniORB-4.1.6_install/usr/local配下をQNX配下にコピーする。 $ $ cd ../omniORB-4.1.6_install/usr/local $ cp -pr include /home/openrtm/qnx700/target/qnx7/usr $ cp -pr bin /home/openrtm/qnx700/target/qnx7/x86_64/usr $ cp -pr lib /home/openrtm/qnx700/target/qnx7/x86_64/usr $ cp -pr share /home/openrtm/qnx700/target/qnx7/x86_64/usr $
$ $ tar -zxvf OpenRTM-aist-1.1.2.tar.gz $ cd OpenRTM-aist-1.1.2 $ source ~/qnx700/qnxsdp-env.sh $ ./configure CC=x86_64-pc-nto-qnx7.0.0-gcc-5.4.0 CXX=x86_64-pc-nto-qnx7.0.0-g++-5.4.0 AR=ntox86_64-ar RANLIB=ntox86_64-ranlib --host=x86_64-unknown-linux-gnu $ ※configureでdoxygen関連のエラーでconfigureが止まる場合はapt-getでdoxygenパッケージをインストールして下さい $ sudo apt-get install doxygen doxygen-gui graphviz ※configureでautomake関連のエラーでconfigureが止まる場合はaptでautomakeパッケージをインストールして下さい $ sudo apt install automake -ldlの削除 src/lib/coil,src/lib/rtm $ gedit config.status $ gedit src/lib/coil/config.status //S["LDFLAGS"]=" -luuid -ldl" <--- -ldlを削除 S["LDFLAGS"]=" -luuid" $ gedit src/ext/ec/rtpreempt/Makefile.am -lrtの削除 #------------------------------------------------------------ # Targets #------------------------------------------------------------ # Targets directories moduledir = $(rtm_ecdir) module_LTLIBRARIES = RTPreemptEC.la RTPreemptEC_la_SOURCES = RTPreemptEC.cpp RTPreemptEC.h RTPreemptEC_la_LDFLAGS = -module -shared RTPreemptEC_la_FLAGS = -L$(top_builddir)/src/lib/rtm/.lib RTPreemptEC_la_LIBADD = \ # -lrt \ $(top_builddir)/src/lib/rtm/libRTC.la \ $(top_builddir)/src/lib/coil/lib/libcoil.la all: all-am $ $ make ※ここで、omniORB4のヘッダ関連のエラーが出る時は2.2.で作成したomniORB-4.1.6_install/usr/local配下のincludeを/usr配下にコピーするか、 configureに"--with-omniorb=/home/openrtm/omniORB-4.1.6_install/usr/local"を追加してconfigureからやり直して下さい $ $ make install DESTDIR=/home/openrtm/OpenRTM-aist-1.1.2_install $ make installまで正常終了したら OpenRTM-aist-1.1.2_install/usr/local 配下をQNX配下にコピーする。 $ $ cd ../OpenRTM-aist-1.1.2_install/usr/local $ cp -pr bin /home/openrtm/qnx700/target/qnx7/x86_64/usr $ cp -pr etc /home/openrtm/qnx700/target/qnx7/x86_64/usr $ cp -pr lib /home/openrtm/qnx700/target/qnx7/x86_64/usr $ cp -pr share /home/openrtm/qnx700/target/qnx7/x86_64/usr $4.仮想マシンでの確認試験の環境構築 ※vSphereで構築されたサーバー上で作成します。 4.1.QNXの仮想マシンの作成 4.1.1.新規仮想マシンの作成 構成:カスタム 名前と場所 名前:QNX700 ストレージ localdisk SSD 仮想マシンのヴァージョン:8 ゲストOS その他->その他(64ビット) CPU 仮想ソケット数:2 仮想ソケットあたりのコアの数:4 メモリ 8GB ネットワーク NICをいくつ接続しますか?:1 NIC 1:VM Network アダプタ:VMXNET 3 パワーオン時に接続をチェック SCSIコントローラ LSI Logic パラレル にチェック ディスクの選択 新規仮想ディスクを作成にチェック ディスクの作成 容量:8 GB ディスクプロビジョニング:シックプロビジョニング(Lazy Zeroed) 場所:仮想マシンで保存 詳細オプション 仮想デバイスノード:IDE(0:0) 終了 4.1.2.作成したQNX700にQNXのVMwareイメージをアップロードする 仮想マシンのホストのストレージから作成したQNX700のフォルダに入る。 1.1.3.でインストールしたqnx700配下にあるifs.vmdkとfs.vmdkをQNX700のフォルダにアップロードする。 qnx700/vmimages/qnx700.x86_64.*/ifs/x86_64/ifs.vmdk qnx700/vmimages/qnx700.x86_64.*/fs/x86_64/fs.vmdk 4.1.3.作成したQNX700のハードディスクにQNXのVMwareイメージを設定する。 QNX700の仮想マシンの設定からいったんハードディスク1を削除する。 次にハードディスクの追加で下記の内容でハードディスクを2つ作成する。 ハードディスク1 仮想デバイスノード:IDE(0:0) 既存のディスクを使用する:ifs.vmdk(先ほどアップロードしたQNX700フォルダ配下のifs.vmdk) ハードディスク2: 仮想デバイスノード:IDE(0:1) 既存のディスクを使用する:fs.vmdk(先ほどアップロードしたQNX700フォルダ配下のfs.vmdk) 4.1.3.QNX700仮想マシンの起動 起動ボタンをクリックしコンソール画面でQNXが起動している事を確認する。 4.2.QNX700仮想マシンにOpenRTM-aist-1.1.2のインストール 4.2.1.QNX開発環境(Linux上)で作成したOpenRTM-aist-1.1.2をQNX700仮想マシンにインストールするには /home/openrtm/qnx700/target/qnx7/x86_64配下のusrをtarコマンド固める。
$ $ cd /home/openrtm/qnx700/target/qnx7/x86_64 $ tar -zcvf usr.tar.gz usr $scpコマンド等で固めたtarファイルをQNX700仮想マシンへコピーし解凍する。
$ $ pwd $ / $ tar -zxvf usr.tar.gz usr $4.3.QNX700仮想マシンでのomniNamingサーバーの起動 4.3.1./usr/bin/rtm-namingシェルの修正 QNX(Unixベース)とLinuxではpsコマンドのオプションに違いがあるため、 このままrtm-namingシェルを実行するとエラーで起動出来ないのでpsコマンドを記述している 箇所に-pオプションを追加して下さい。 4.3.2.omniNamingサーバーの起動 rtm-namingシェルを実行し、omniNamingが起動する事を確認する
$ $ cd /usr/bin $ ./rtm-naming $4.4.OpenRTM-aist-1.1.2に付属しているexampleの実行 以下のC++版のexampleを実行し動作する事を確認する。 1.SimpleIO 2.SeqIO 3.SimpleService 4.Composite 5.ConfigSample ※実行結果を添付します。ご確認して下さい。