$ wget http://openrtm.org/pub/OpenRTM-aist/cxx/1.1.0/OpenRTM-aist-1.1.0-RELEASE.tar.bz2
$ tar xvjf OpenRTM-aist-1.1.0-RELEASE.tar.bz2
$ cd OpenRTm-aist-1.1.0
$ wget http://svn.openrtm.org/Embedded/trunk/Armadillo/atde2/tools/openrtm_conf_arm.sh
$ make
$ make install
OpenRTM-aistのクロスコンパイル
クロス開発とは、ターゲットとは異なるアーキテクチャ上でそのターゲット用のバイナリを開発することです。
ArmadilloはARM Ltd.により開発されたARMアーキテクチャのCPUを搭載している組み込みコンピュータです。 一方、大半のPCはIntelが開発した i386 (または x86_64) アーキテクチャのCPUを搭載しています。 通常、ARM CPU上で実行できるバイナリ(コマンド、アプリケーション)は、i386 CPU上では実行できませんし、i386 CPU用のバイナリは、ARM CPU上では動作しません。 CPU毎に異なるバイナリ実行形式を用意してあげる必要があります。
通常ARM CPUは安価・省電力である一方、PCなどと比べるとメモリやハードディスクが少なく(ハードディスクが無いことも多い)、速度も遅いので、ARMを搭載した組み込みコンピュータ上でコンパイルなどの開発作業を行うことは効率的ではありません。 (実際、Armadillo-200シリーズに組み込まれているARM CPUはそれほど遅くはなく、一昔前のPCくらいの速度はありますので、開発作業は不可能ではありませんが、開発に必要なディスクスペースがありません。)
そこで、一般的なPC上で、ARM CPU上で実行可能なバイナリを作成(クロスコンパイル)するクロス開発が通常行われます。
ATDEはArmadillo用のクロス開発を行うための各種ツールがあらかじめインストールされており、標準ライブラリのみ使用するのであれば、そのままの環境で開発することができます。 /usr/arm-linux-gnueabi の下には、ARM用にコンパイルされた実行ファイルやライブラリファイルが格納されています。 以下のようにfileコマンドを使って確認してみてください。
ELF 32-bit LSB shared object, ARMという文字が見えますが、これはこのライブラリがARMアーキテクチャ用のものであることを表しています。
標準以外のライブラリが必要な場合、ARM Linux用にコンパイルされたDebianパッケージを、クロス開発環境にインストールすることで、これを利用したアプリケーションなどをコンパイル・リンクすることができます。
以下、OpenRTM-aistをクロスコンパイルするために必要なパッケージのインストール、クロスコンパイル方法について解説します。
必要なパッケージのインストール
クロス開発を行うためには、ARM用の各種ライブラリをインストールする必要があります。ATDE3では既に大半のライブラリが用意されており、簡単なプログラムであればほぼそのままで利用できますが、OpenRTM-aistを使用する場合はomniORBやlibuuidなどOpenRTMが利用しているライブラリをインストールする必要があります。
OpenRTMを利用するために必要なライブラリをインストールするには、一括インストールスクリプトpkg_install_atde3.shを利用すると便利です。
以下、pkg_install_atde2.sh が行なっていることを簡単に説明します。
ARM用debパッケージ
ARM用のライブラリは以下のサイトに様々なアーキテクチャ用にまとめて置かれています。
例えば、omniORBは、
以下に置かれています。libomniorb4のパッケージだけでも、これだけあります。
aplha, hppa, mipsdel などおそらく聞きなれないアーキテクチャのパッケージもあれば、i386, amd64, powerpc などのおなじみのアーキテクチャのものもあります。 ARM用のパッケージには、armとarmelの2種類がありますが、Armadillo-400シリーズでは通常 armel アーキテクチャのパッケージを利用します。
ARMには現在2種類のABI (Application Binary Interface) があり、それぞれ OABI (Old ABI), EABI (Embedded ABI) と呼ばれます。 arm パッケージはOABI用にコンパイルされたものであることを意味し、armel パッケージはEABI用にコンパイルされたものであることを意味します。 なお armel は ARM little-endian (eとlが逆のような気もしますが) の略で、実際バイエンディアンCPUであるARM用に armeb (ARM big-endian) という名称もありますが、こちらは使われていないようです。
dpkg-cross
クロス開発用のライブラリをインストールするためには、dpkgではなくdpkg-crossコマンドを利用します。 なお、apt-getのクロスパッケージ版のapt-crossというコマンドもありますが、ATDE2のベースとなっている Debian Etch にはパッケージとして存在しないので、debパッケージを一つづつダウンロードして dpkg-cross を用いてインストールする必要があります。
dpkg-cross は以下の様に使用します。
必要なパッケージ
OpenRTMをコンパイルするために必要なパッケージは以下のとおりです。
Etch用ARMアーキテクチャ対応のomniORBがリポジトリには存在しますが、omniORBが古くかつ浮動小数点の値の送受信にバグがあるため、自分でソースからコンパイルする必要があります。 i386用パッケージはapt-getで、arm 用パッケージはdpkg-crossでインストールします。
omniORBのコンパイル
リポジトリからダウンロードできる omniORB-4.0.6は、コンパイル時のオプションの関係で、double型のデータをネットワーク経由でやり取りすると、値が化けるというバグがあります。したがって、omniORBに関してはソースからコンパイルしインストールする必要があります。 omniORB-4.1.6以降ではこのバグの対処がなされているので、再コンパイルする場合は4.1.6以降のバージョンを推奨します。 omniORBのクロスコンパイルの手順をまとめたスクリプトを利用することもできます。(このスクリプトは4.1.6以前、以後を判断して、4.1.6より前のomniORBには自動的にパッチを当てます。)
途中、CC=gcc, CXX=g++ などと指定しているのは、ホスト(i386)環境上で動かす必要のあるomniidlの関連モジュールをコンパイルしているためです。 (omniORBはビルドの途中で、幾つかのIDLファイルをomniidlでコンパイルしますが、omniidl自体がARM用実行ファイルだと実行できないため。)
また、上記のスクリプトを使った場合、
となり、若干手順が簡単になります。
OpenRTM-aistのクロスコンパイル
OpenRTM-aistはビルドシステムにautoconf/automakeを利用しているため、configureのオプションを幾つか指定するだけでクロスコンパイル可能です。
もしくは、OpenRTM用cofnigureスクリプト を利用して、
とすると、手順が若干簡単になります。
以上でOpenRTM-aistがクロス開発環境にインストールされました。 以下のファイルがあることを確認してください。