Armadillo240は アットマークテクノから販売されている、ARM を搭載した Linux 搭載可能な小型 CPU ボードです。 Atmark Techno, Inc.から、ATDE2 (Atmark Techno Development Environment)と、GNU クロス開発ツール、AtmarkDist という3つの開発ツールが提供され、簡単にクロス開発を行うことができます。
ここでは、Armadillo で実行できる RTコンポーネントの実行ファイルをクロス開発します。 その後、Armadillo 起動後、RTコンポーネントが自動で起動するイメージファイル(romfs:ルートファイルシステム)を作成します。
※ATDE2-20071018.zip を解凍し、解凍したフォルダの中の ATDE2.vmx をダブルクリック、または VMwareのfile > Open から解凍したフォルダーの中の ATDE2-20071018のATDE2.vmx を選択してください。
ATDE2 はすでにクロスコンパイル環境が整っていますが、OpenRTM の RTコンポーネントをクロス開発できる環境に整える必要があります。 起動したATDE2 上で以下のソースとシェルスクリプトをダウンロードしホームディレクトリー以下の適当な作業ディレクトリーに入れておきます。
deb http://downloads.pylone.jp/cross-toolchain/deb ./ deb http://www.openrtm.org/pub/Linux/debian/ etch main
# apt-get update # apt-get install python-yaml (yesまたはYを入力してインストールを完了してください。)
# sh arm-cross-install.sh (yesまたはYを入力してインストールを完了してください。)
# apt-get install gdm (yesまたはYを入力してインストールを完了してください。) # /etc/init.d/gdm start
OpenRTM-aist-0.4.2 のソースコードをホームディレクトリーなどの適当なディレクトリーに展開してください。展開後、作成されたディレクトリーに移動します。
# tar zxvf OpenRTM-aist-0.4.2.tar.gz # cd OpenRTM-aist-0.4.2
# cp ../config.sh ./ # sh config.sh /usr/arm-linux-gnu
# make
OpenRTM-aist-0.4.2/rtm OpenRTM-aist-0.4.2/rtm/idl OpenRTM-aist-0.4.2/utils/rtm-config OpenRTM-aist-0.4.2/utils/rtm-naming OpenRTM-aist-0.4.2/utils/rtc-template
# make install
以上で、RTコンポーネントをクロス開発する環境が整いました。 ここでは例として、サンプルに含まれる SeqOutComp のソースを使用してクロスコンパイルしてみます。
> export PATH=/usr/arm-linux-gnu/bin:$PATH
サンプルを作成するため適当なディレクトリーを作成し、そこに OpenRTM のサンプル SeqOut のソースに含まれる以下のファイルをコピーしてください。
SeqOutComp.cpp SeqOut.h SeqOut.cpp Makefile.SeqOut
> mkdir test > cp (インストールディレクトリー)/OpenRTM-aist-0.4.2/examples/SeqIO/SeqOutComp.cpp ./test/ (上記のコマンドですべてコピーしてください)
OutPort を八つ持つ SeqOutComp というコンポーネントを生成します。
生成された、Makefile.SeqOut の内容を確認してください。CXX=で始まる行がない場合、コンパイラにクロス用のコンパイラを以下のように指定する必要があります。
環境変数を設定し make する
> CXX=arm-linux-gnu-g++ make -f Makefile.SeqOut
> export CXX=arm-linux-gnu-g++ > make -f Makefile.SeqOut
make が正常に完了すると、SeqOutComp の実行ファイルが生成されます。
Armadillo240 上で RTコンポーネントを実行するのに必要なファイルを USBメモリーにコピー、生成します。
この例では、先ほどクロスコンパイルした SeqOutComp を使用します。 SeqOutComp をUSBメモリーの適当な場所(ルートディレクトリー等)にコピーします。
このディレクトリー内のライブラリのうち、以下のものを USBメモリーにコピーします。 USBメモリーにライブラリを置くディレクトリーlibを作成します。
>mkdir lib 又は、 GUI の場合、右クリックでフォルダーを作成します
/usr/arm-linux-gnu/lib のライブラリをコピーする際に、以下の通りに名前を変更してください。
ライブラリ名 | ライブラリ名変更後 |
libomniDynamic4.so.0.6 | libomniDynamic4.so.0 |
libomniORB4.so.0.6 | libomniORB4.so.0 |
libomnithread.so.3.1 | libomnithread.so.3 |
libRTC-0.4.2.so.0.0.4 | libRTC-0.4.2.so.0 |
librt.so.1 | librt.so.1(変更なし) |
libACE.so.5.4.7 | libACE.so.5.4.7(変更なし) |
ライブラリ名 | ライブラリ名変更後 |
libm-2.3.6.so | libm.so.6 |
libomiDynamic4.so.0.6 | libomniDynamic4.so.0 |
libomnithread.so.3.1 | libomnithread.so.3 |
librt.so.1 | librt.so.1(変更なし) |
libRTC-1.0.0.so.0.0.4 | libRTC-1.0.0.so.0 |
libstdc++.so.6.0.8 | libstdc++.so.6 |
libuuid.so.1.2 | libuuid.so.1 |
Armadillo上ではネームサーバを起動しませんので、別のPC上でネームサーバを起動しておいてください。 rtc.confのcorba.nameservers のオプションにはそのネームサーバを起動したPCのアドレスを指定します。
corba.nameservers: 192.168.100.1 (自分のネームサーバーのIPアドレスを入力) naming.formats: %n.rtc
自動でマウントされないときはVMware(ATDE2)の端末でsuコマンドでrootになりmountをし直します。
> su # mkdir /mnt/(適当なディレクトリー) # mount -t vfat /dev/sdb1 /mnt/(上で作成したディレクトリー)
# umount /mnt/(上で作成したディレクトリー)
USBメモリーの準備を終えると、USBメモリーは下のようなディレクトリー構造になります。
USBメモリー -+- lib --+- libomniDynamic4.so.0 | +- libomniORB4.so.0 | +- libomnithread.so.3 | +- libRTC-0.4.2.so.0 | +- librt.so.1 | +- libACE.so.5.4.7 | +- SeqOutComp | +- rtc.conf
USBメモリー -+- lib --+- libm.so.6 | +- libomniDynamic4.so.0 | +- ibomnithread.so.3 | +- librt.so.1 | +- libRTC-1.0.0.so.0 | +- libstdc++.so.6 | +- libuuid.so.1 | +- SeqOutComp | +- rtc.conf
USBメモリーのマウント設定、ライブラリ PATH の設定を変更し、実行ファイルを動かします。 PC とArmadillo をシリアルケーブルで接続し、Armadillo上 の Linux のシリアルコンソールからログインすることで Armadillo上 の Linux を操作することができます。 以下のやりやすい方法で進めてください。
ATDE2上から端末エミュレーターのプログラムminicomで操作します。 PCのシリアルポートと Armadillo のシリアルポートをシリアルケーブルで接続してください。 シリアルポートがない PC の場合は USB-シリアル変換ケーブルなどを使用する必要があります。 Armadillo のシリアルケーブルの接続方法に関しては、Armadillo のマニュアルを参照してください。
※VMware の仮想マシンのデバイスの設定を以下のように行ってください。
メニューバー > VM > 設定 > ハードウェアタグ
接続のチェックを確認してください。
デバイスステータスのチェックと、接続 > 物理シリアルポートを使用でポートを確認してください。 ATDE2 の端末から、端末エミュレーターminicom を起動します。
> minicom
Windowsから、TeraTerm などの端末エミュレーターを使用して Armadillo のシリアルコンソールと接続することもできます。TeraTerm はこちらから無料でダウンロードできます。 以下の設定で起動してください。
上記の設定で起動すると、Armadillo240 のログイン画面が表示されます。 ※表示されないときは Enter を押してください。 以降は共通の操作に進んでください。
USBメモリーを Armadillo に差してください。 Armadillo のログイン画面で、root (パスワード:root) でログインしてください。 デフォルトの mount はオプション(umous=111)で、どのユーザーも実行のできないパーミッション設定です。
一度アンマウントしてから、書き込み・実行可能な -o rw オプションでリマウントします。
# umount /dev/sda1 # mount -t vfat -o rw /dev/sda1 /home/www-data/storage/
# su guest > cd /home/www-data/storage
> export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/home/www-data/storage/ > ./SeqOutComp (実行ファイルが実行されました)
※RtcLink からも確認できます。
この方法では Armadillo の起動の度に設定を修正しなくてはなりません。 次の章では、Armadillo の起動後 RTコンポーネントが自動で起動するイメージファイルを作成し、Armadillo にダウンロードします。
これまでの方法だと、Armadillo の起動ごとに端末エミュレーターで設定を変更する必要があります。ここでは、AtmarkTechno,Inc から提供されている atmark-dist を使い、Armadillo240 の起動後 RTコンポーネントが自動で起動するイメージファイルを作成し、Armadillo にダウンロードします。
RTコンポーネントをクロスコンパイルした ATDE2 の環境をそのまま使います。ATDE2上に以下の項目をダウンロードしてください。
ここでは、Armadillo の userland のイメージファイルを作成します。 ここで作成するイメージファイルを使用すると、USBメモリーにあらかじめインストールされた RTコンポーネントを、自動的に起動できるようになります。
#!bin/sh . /etc/default/openrtm.conf export LD_LIBRARY_PATH=$LIBPATH:/home/openrtm/lib/ /home/openrtm/SeqOutComp(実行ファイル名) -f /home/openrtm/rtc.conf
ATDE2上で、atmark-dist と linuxカーネル、openrtm.patch をダウンロードし展開してください。
> tar zxvf atmark-dist--20090318.tar.gz > tar zxvf linux-2.6.12.3-a9-15.tar.gz
> ln -s ../linux-2.6.12.3-a9-15 ./linux-2.6.x
> make config Select the Vendor you wish to target :Atmarktechno(入力) Select the Product you wish to target :Armadillo-240.Recover(入力) Kernel is linux-2.6.x :default(enterでもOK) defined CONFIG_DEFAULTS_CROSSDEV_DEFAULT:none(enterでもOK) Default all settings :y(入力) Customize Kernel Settings :n(enterでもOK) Customize Vendor/User Settings :n(enterでもOK) Update Default Vendor Settings :n(enterでもOK、終了)
openrtm.patchをコピーし以下の手順でパッチを当ててください。
> cp openrtm.patch /atmark-dist-YYYYMMDD/vendor/AtmarkTechno/Armadillo-240.Recover/openrtm.patch > cd /atmark-dist-YYYYMMDD/vendor/AtmarkTechno/Armadillo-240.Recover/ > patch -p1 <openrtm_new.patch (パッチ終了)
> cd ../../../ > make dep all
/bin/sh: extensions/.dccp-test: 許可がありません /bin/sh: extensions/.layer7-test: 許可がありません /bin/sh: extensions/.statistic-test: 許可がありません make[2]: ディレクトリー `/home/atmark/Desktop/foratde/forkernel/atmark-dist-200807 17/user/iptables' に入ります romfs-inst.sh /bin/iptables romfs-inst.sh -l /bin/iptables /bin/iptables-save ln: `/bin/iptables' にアクセス中: そのようなファイルやディレクトリーはありません romfs-inst.sh -l /bin/iptables /bin/iptables-restore ln: `/bin/iptables' にアクセス中: そのようなファイルやディレクトリーはありません
> ls images linux.bin linux.bin.gz romfs.img romfs.img.gz
生成した userland のイメージファイルromfs.img.gzを Armadillo240 にダウンロードします。 Armadillo はジャンパピン(2)をショートして、電源を入れておいてください(Armadilloハードウェアマニュアルのp.16を参考にしてください)
VMware(ATDE2)、Windows どちらからでもダウンロードできます。
こちら で VMware の仮想マシンのデバイス設定を行ってから進めてください。
> hermit download -i images/romfs.img.gz -r userland --port /dev/ttyUSB0 (または、/dev/ttyS0)
serial: completed 0x004455fd (4478461) bytes. (完了)
Armadillo240 に同梱されている CD-ROM の downloader > win32 > Hermit.zip を Widows上に置いてください。
RTCLink を起動し、RTコンポーネントの起動を確認します。
> su # /etc/init.d/omniorb4-nameserver start
Armadillo と北陽電機URGセンサーと組み合わせ、分散センサーシステムを簡単に構築するためのユニットです。 Armadillo 上では URG センサー RTコンポーネントが動作します。(Armadillo 電源投入と同時に RTC が自動起動します。) PoE (Power over Ether) 対応の Armadillo を使用することで、LANケーブルのみで通信・給電が可能です。 URG センサーも PoE からの電源供給で動作します。 ケーブル1本のみでセンサー配置が可能ですので、分散センサーシステムを容易に構築できます。