このドキュメントは、アットマークテクノ社から発売されている、ARMベースの小型汎用CPU ボードArmadillo-200シリーズ(このドキュメントでは 220, 240 を対象とし、USBポートの無いArmadillo-210, 230を除きます)上でRTコンポーネントを動作させる方法について解説します。
Armadillo-200シリーズは、ARM9を搭載した小型CPUボードです。
アットマークテクノからは、さまざまなドキュメントが提供されていますので、RTCをArmadilloに移植する前にこれらをよく読んで理解してください。
Armadillo-220ドキュメント | ||
スタートアップガイド | v1.1.6 | PDF, HTML |
製品マニュアル | ||
ハードウェアマニュアル | v2.1.4 | PDF, HTML |
ソフトウェアマニュアル | v2.2.2 | PDF, HTML |
製品ドキュメント | ||
Atmark Dist 開発者ガイド | v1.0.9 | PDF, HTML |
ATDE2 インストールガイド | v2.0.5 | PDF, HTML |
開発ガイドブック | ||
Armadillo実践開発ガイド 第1部 | v2.2.0 | PDF, HTML |
Armadillo実践開発ガイド 第2部 | v2.2.0 | PDF, HTML |
Armadillo実践開発ガイド 第3部 | v2.1.0 | PDF, HTML |
これらのドキュメントは公式サイトで更新されているかどうか確認し、できるだけ最新のものを参照するようにしてください。
Armadillo-200シリーズは組み込みCPUボードのため、PC上のクロスコンパイル環境上でRTコンポーネント開発し、それをUSBメモリなどにコピーして起動させる必要があります。RTコンポーネントを動作させるまでの手順はおおよそ以下のようになります。
では、まずはじめにOpenRTM-aistに付属のサンプルを動かして、Armadillo上でRTコンポーネントを動かす手順を確認して行きましょう。
開発環境 ATDE2 のセットアップ で必要となるATDE2 for OpenRTM-aist のVMwareイメージを以下からダウンロードできます。
説明 | ファイル名 | MD5 | サイズ |
ATDE2 for OpenRTM-aist | atde2_for_openrtm_20121005.zip | cd22a133c1d77a8e8c87c36aad5e6886 | 1776 MB |
Armadillo-200シリーズはARM9を搭載したLinuxが動作可能な組込みCPUボードです。Armadillo-210, 220, 230, 240 があり、それぞれ以下の様な仕様となっています。
Armadillo-210 | Armadillo-220 | Armadillo-230 | Armadiilo-240 | |
プロセッサ | Cirrus Logic EP9307 | |||
CPUコア | ARM920T | |||
CPUコアクロック | 200MHz | |||
バスクロック | 100MHz | |||
RAM | 32MB (SDRAM) | 64MB (SDRAM) | ||
フラッシュメモリ | 4MB (NOR型) | 8MB (NOR型), 拡張可能 | ||
LAN(Ethernet) | RJ45×1 (100BASE-TX/10BASE-T) | RJ45×2 (100BASE-TX/10BASE-T) | RJ45×1 (100BASE-TX/10BASE-T) | |
シリアル(UART) | RS232C×1, 3.3V CMOS×1 | RS232C×1, 3.3V CMOS×2 | 3.3V CMOS×2 | |
GPIO | 8bit (コネクタ非搭載) | 16bit (コネクタ非搭載) | ||
USB | - | USB 2.0(Host)×2 (Full Speed) | - | USB 2.0(Host)×2 (Full Speed) |
電源電圧 | DC9~48V または PoE(Type B) 対応 |
DC5V±5% または PoE(Type A/B)対応 | ||
消費電力 | 1.2W (Typ.) | 1.5W (Typ.) | 1.7W (Typ.) | 1.5W (Typ.) |
210は他とは基板サイズが異なりかなり小型のボードです。220が最もベーシックなタイプで、230はUSBの代わりに、もう一つのネットワークアダプタがついているタイプ、240はシリアルコネクタの代わりにVGAがついており、モニタへの出力ができます。(ただし、このVGAは通常コンソールとしては利用できずフレームバファデバイス経由でのみアクセス可能です。)
詳細な仕様については、アットマークテクノのサイトを参照してください。
小型の組込みCPUですので、キーボードやマウス、モニタ等は接続できず、センサを接続したり、特定のデバイスやロボットなどを制御するために使用するのが一般的な使用方法です。 外部とのインターフェースはシリアル (RS232C) と Ethernet (LAN) があります。 運用時などは、ネットワーク経由でコマンドを送ったり、モニタリングします。あるいは、Armadillo側が自発的に外部に接続してデータのやり取りを行うかもしれません。
開発時には、PCとシリアルケーブルで接続して、シリアルコンソールからLinuxにログインしてデバッグなどを行います。 X-Windowなども動作しませんので、GUIでの操作は通常出来ません。
コマンドラインでの操作やviエディタの使用に慣れておくことをおすすめします。
Armadilloは特定の用途向けのアプリケーションのみを実行することを前提としているため、一般的なPCとは異なり十分な容量のハードディスクやメモリを搭載していません。 したがって、アプリケーション・プログラムの開発もArmadillo上で行うのではなく、PC上の開発環境内で行い、コンパイルしたバイナリを何らかの方法でArmadilloに転送して実行します。 一般的なPCのCPUはIntelのx86系アーキテクチャのものですが、ArmadilloはARMという異なるアーキテクチャのCPUを搭載しています。x86用のバイナリはARM上では実行できませんし、その逆も不可能です。 PC上の開発環境ではARM用の実行ファイルをコンパイルできるコンパイラを動作させ、アプリケーションを開発することになります。 こうした開発方法をクロス開発と呼びます(下図)。
Armadilloは開封すると、ベースとなる基板とピンヘッダや各種コネクタ (USB、シリアル、VGA、DC、Ehternet等) 、LEDなどが同梱されています。 必要な部品類を半田付けして組み立てましょう。 詳細は、Armadilloのハードウエアマニュアルを参照してください。
開発時には Armadillo はPCからシリアルコンソールで操作しますので、下図のように Armadillo と PC をシリアルケーブルで接続します。
PC側のシリアルポートとArmadilloのシリアルポートを接続してください。 Armadillo-220では基板上にD-SUBのRS232Cコネクタがありますので、Armadilloに付属のクロスケーブルでPCと接続します。 Armadillo-240の場合は、D-SUBコネクタがありませんので、Armadilloに付属しているシリアルポート変換ケーブルを基板上のピンヘッダへ接続して、反対側のD-SUBコネクタをシリアルケーブルにつなぎこれをPCに接続します。
最近のPCやノートPCではシリアルポートが無いことがあります。その場合はUSBシリアル変換 (ケーブルタイプのものやコネクタタイプのものなどがあります) を使用してください。
また、LANケーブルをLANコネクタに接続します。Armadilloは通常DHCPでIPアドレスを取得しますので、DHCPが利用できるネットワーク環境を用意してください。
PCとArmadilloをシリアルケーブルで接続したら、シリアルコンソールを利用するためのターミナルアプリケーションをインストールします。 様々な種類のターミナルソフトがありますが、おすすめはTeraTermです。 以降TeraTermの利用を前提として説明します
TeratTermを起動します。
はじめにSSHおよびシリアル接続を選択するダイアログが表示されます。 利用可能なシリアルポートがあれば、ダイアログの下部のシリアルポートが選択できます。この場合COM2がArmadilloに接続されているシリアルポートなので、COM2を選択します。
Armadilloに接続可能なシリアルポートがどれかわからない場合は、デバイスマネージャなどで調べることができます。 Windows7の場合、「コントロールパネル」->「システムとセキュリティー」->「システム」->「デバイスマネージャ」からアクセスできます。
Armadilloに電源を入れると、以下のように起動します。
ログインプロンプトが出たら起動完了です。アカウント名 root, パスワード rootでログインしてみてください。 ほぼ通常のLinuxのように利用できます。
ifconfigコマンドを入力してArmadilloのIPアドレスを調べます。
[root@a240-0 (ttyAM0) ~]# ifconfig eth0 Link encap:Ethernet HWaddr 00:11:0C:05:07:60 inet addr:192.168.0.12 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::211:cff:fe05:760/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:5760 errors:0 dropped:0 overruns:0 frame:0 TX packets:53 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) Interrupt:39 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:9 errors:0 dropped:0 overruns:0 frame:0 TX packets:9 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:480 (480.0 B) TX bytes:480 (480.0 B)
eth0がLANのインターフェースです。192.168.0.12 というのがこのArmadilloのIPアドレスです。 ブラウザでこのアドレスにアクセスしてみてください。
AT AdminというArmadilloの管理ページが表示されるはずです。 Systemメニューを表示するには以下のIDとパスワードが必要です。
ID | パスワード |
admin | admin |
AT Adminのページが表示されない場合、ArmadilloにインストールされているromfsイメージがAT Adminに対応していない可能性がありますので、後述の「イメージの書き換え(Hermit-At)」で、デフォルトのイメージ (BaseではなくRecover) に書き換えてください。
AT AdminはブラウザからArmadilloの各種設定を行えて便利なのですが、ArmadilloのIPアドレスを毎回調べなければなりません。そこで、これを解決するために Bonjour (およびAvahi) を利用します。
BonjourはAppleが提唱するネットワーク上のサービスを自動的に検索して利用できるようにするためのサービスです。 Armadilloでは通常、AT-AdminというブラウザからArmadilloをリモート管理するためのサービスがBonjourから利用できるようになっています。 Bonjourのサービスを検索するためには、PCにBonjourがインストールされている必要があります。
Mac OS XではデフォルトでBonjourが利用できるようになっています。 LinuxではAvahiというBonjour互換サービス (Avahi) が利用できます。詳細な利用方法はディストリビューションごとのマニュアルを参照してください。
Windowsではデフォルトではインストールされていません。最も簡単にBonjourを導入する方法は iTunes をインストールすることです。
どうしてもiTunesをインストールしたくない場合は、アーカイバアプリケーションなどで、ダウンロードした iTunesSetup.exe を展開すると BonjourSetup.exe を抽出することもできます。
また、以下のApple Bonjour印刷サービスにもBonjourが同梱されています。(iTunesに同梱されているものよりバージョンが若干古いようです。)
現在ApplieではBonjour for Windows単体としては配布は行なっていませんが、かつて配布していたものを再配布しているサイトも幾つかあります。(ただし、古いバージョンしか入手できないようです。) 以下はAppleサイト以外のBonjourダウンロードサイトです。自己責任でご利用ください。
FirefoxにはBonjourサービスを検索するアドオンが用意されています。
Firefoxで上記サイトをアクセスし、「+Firefoxに追加」をクリックしインストールしてください。 インストールするとアドレスバーの左側に、図のようなアイコンが現れます。
このアイコンをクリックすると
同一ネットワークでArmadilloが動作している場合、AT Admin on axxx... といったメニューが表示されるかもしれません。これをクリックすると図のような AT Adminのサービス画面が表示されます。
ここから、Armadilloの様々な設定をブラウザから行うことができます。
Bonjourが正しくインストールさていない場合、以下のように No servicesと表示されます。
古いバージョンのBonjour (v1.0系) をインストールすると、Internet Explorer (IE) のエクスプローラバーにBonjourサービスを表示するアドオンがインストールされます。 (これはBonjour v1.0.6.2とIE9 (64bit) の組み合わせで動作しました。他のバージョンでも動作する可能性はありますが未検証です。)
図のようにメニューから「表示(V)」->「エクスプローラーバー(E)」->「Bonjour」を選択すると、Bonjourのサービス一覧を表示するペインが左側に現れます。 メニューが表示されない場合、メニューが非表示になっている可能性があります。Altキーを押してメニューを表示してください。 (メニューにBonjourがない場合、BonjourとIEのバージョンがそれぞれ動作しない組み合わせである可能性があります。Firefoxを利用することをおすすめします。)
同一ネットワークでArmadilloが動作している場合、AT Admin on axxx... といったメニューが表示されるかもしれません。これをクリックすると、Armadillono管理サービスAT Adminの画面がブラウザに表示されます。
ファイヤウォールが動作している場合、Bonjourがうまく機能しないことがあります。 その場合、UDPポート5353を開放するかファイヤウォールをOFFにしてください。
AT Adminが使えない場合、もしくは独自のシステムに入れ替える場合、Armadillo上のLinuxシステムを書き換える必要があります。 ArmadilloのFlashメモリには
といった領域があり、それぞれ必要に応じて入れ替えることができます。 各領域は、メモリ上で実際に動作する際の状態(あるいはそれを圧縮した状態)で格納されており、これを通常イメージと呼びます。 ブートローダが他の領域をメインメモリ(RAM)利用域にコピーまたは展開して、システムが動き出します。 bootloaderおよびconfigは通常入れ替える必要はほとんどなく、システムの構成を変更する際は主にLinuxカーネルとユーザランドを入れ替えます。
LinuxカーネルはLinuxのOSそのものであり、すべてのアプリケーション・プログラムはLinuxカーネルの制御下で動作します。 アプリケーション・プログラムが利用するファイル、メモリやデバイスの管理・リソース割り当て等を行います。 Linuxのカーネルの書き換えは、主にカーネルにデバイスドライバを追加(または削除)したい場合、Linuxカーネルの機能を有効(または無効)にしたい場合などに行います。
一方、ユーザランドはシステムが利用するプログラム等を含むLinuxのファイルシステムです。 新しいコマンドやライブラリ、アプリケーション・プログラムを追加したい場合はユーザランドをコンパイルしなおして、ArmadilloのFlashメモリ内のユーザランドイメージを書き換える必要があります。
Armadilloでは主に以下の2種類のイメージの書き換え方法があります。
最も基本的な書き換え方法です。 PC上で動作するHermit-Atというアプリケーションからシリアルポート経由でFlashメモリを書き換えます。 シリアルポートを利用するため、後述のnetflashより遅いという欠点がありますが、Armadillo上のLinuxシステムが動作していなくても、イメージを書き換えることができます。
システムのイメージが不正な状態で起動しない場合などはこの方法で書き換えて復活させるしか方法がありません。
Hermit-AtはアットマークテクノのWebサイトからダウンロードできます。
また、デフォルトのカーネルイメージとユーザランドイメージに書き換える場合は、以下の2つのイメージもダウンロードしてください。
ArmadilloのDCコネクタ付近に4本(2x2)のピンヘッダが出ています。 このうち、逆サイドのLANコネクタやUSBコネクタに近い2ピンをジャンパでショートさせます。 これで、hermitによるROM書き込みモードになります。 この段階ではまだArmadilloに電源を入れないでください。
hermit.exe を起動するとこのようなウインドウが現れます。
まず、使用するシリアルポートを選択します。 ここでは、COM2がArmadilloに接続されているシリアルポートです。
Memmapボタンを押してみてください。PCとArmadilloが正しく接続されており、ArmadilloがHermitのダウンロードモードになっていれば、メモリマップが表示されます。
これから書き換えようとしているのは、kernel のカーネル領域と、userlandのユーザランド領域です。
まず、カーネルの書き換えを行います。 Erase ボタンを押し、Regionのプルダウンで kernelを選択し、実行ボタンを押します。
ダイアログが表示されカーネル領域が削除されます。
次にダウンロードボタンを押し、linux.bin.gz (拡張子が見えず linux.bin と表示されますが、種類がGZファイルとなっているほう) を選択します。以上が終わったら実行ボタンをクリックします。 書き込みダイアログが表示され、数分でカーネルの書き込みは終了します。
次にユーザランドを書き換えます。 カーネル同様、Erase メニューで userland を削除してからDownloadメニューで、
を選択し、書き込みを行います。 ユーザランドはファイルサイズが大きいため、書き換えには十数分かかります。
以上で、カーネルとユーザランドの書き換えは終了です。
NetflashはローカルのファイルまたはインターネットからイメージファイルをダウンロードしFlashメモリを直接書き換えるツールです。 シリアルコンソールからArmadilloにログインしnetflashコマンドを利用する方法と、AT Adminから利用する2通りの方法があります。
netflashは以下の様なオプションを取ります。
usage: netflash [-bCfFhijklntuv?] [-c console-device] [-d delay] [-o offset] [-r flash-device] [net-server] file-name
[root@a240-0 (ttyAM0) ~]# ls /dev/flash/ bootloader config kernel nand nandblock userland
デバイスファイル名 | 意味 |
/dev/flash/bootloader | ブートローダ領域 |
/dev/flash/config | config領域 |
/dev/flash/kernel | カーネル領域 |
/dev/flash/nand | --- |
/dev/flash/nandblock | --- |
/dev/flash/userland | ユーザランド領域 |
利用するのは主に /dev/flash/kernel と /dev/flash/userland です。
カーネルを書き換える場合は以下のように入力します。
[root@a240-0 (ttyAM0) ~]# netflash -k -n -r /dev/flash/kernel http://armadillo.atmark-techno.com/files/downloads/armadillo-240/images/linux-a240-1.10.bin.gz : (中略) netflash: programming FLASH device /dev/flash/kernel ....................... Restarting system.
書き換えが終わると再起動します。 ユーザランドを書き換える場合は以下のように入力します。
[root@a240-0 (ttyAM0) ~]# netflash -k -n -r /dev/flash/userland http://armadillo.atmark-techno.com/files/downloads/armadillo-240/images/romfs-a240-recover-1.11.img.gz : (中略) netflash: programming FLASH device /dev/flash/userland ....................................................................................................... Restarting system.
こちらも書き換えが終わるとシステムが再起動されます。 ユーザランドの書き換えも2分程度で終わります。シリアル経由で書き換えた場合に比べ非常に早く書き換えが可能です。
ArmadilloでAT Adminが動作していれば、Systemメニューから書き換えを行うことができます。
AT AdminのSystemメニューをクリックし、Frimwareサブメニューに入ります。
「Get firmware options」をクリックすると、利用可能なユーザランドイメージとカーネルイメージが自動的に取得され、プルダウンメニューから選択可能になります。
通常、最も新しいバージョンのイメージを選択します。
Allow all image types にチェックを入れ、「Update userland」を押すと、イメージの書き換えが始まります。
カーネルで1分程度、ユーザランドで2-3分程度で書き替えが終わります。書き換えが終わると、元のFirmware画面に戻ります。
サンプルのRTコンポーネントをArmadillo上で起動し、PC上のコンポーネントと通信させてみます。 PC上にOpenRTM-aist C++ (の最新版) をインストールしてください。 以下ではPCのOSがWindowsであることを前提として話を進めます。
OpenRTM-aistのコンポーネントをUSBメモリから自動起動するためのカーネルとユーザランドイメージへ書き換えを行います。
AT Admin の「System」->「Firmware」メニューにアクセスします。
上図のように、ページ下部
Current firmware download location: http://download.atmark-techno.com/armadillo-2x0/images/ change
のchange をクリックします。 下図のように、Firmwareのダウンロードサイトを入力する画面になりますので、
http://openrtm.org/pub/Armadillo/images/Armadillo-240
と入力しUpdateボタンを押します。
先ほどのFirmwareページに戻りますので、「Get firmware options」 ボタンを押すと、上記サイトのFirmwareオプションが選択できるようになります。
幾つかあるイメージのうち、以下のイメージを使用します。
x.y は最新のバージョンに読み替えてください。
上記で説明したように、ユーザランドとカーネルをそれぞれ書き換えてください。 (ユーザランドを書き換えるときはAllow all image types をチェックしてください。)
Armadilloは設定を恒久的に保存できるようにフラッシュメモリの一部にconfig領域を持っています。 以前に使用されたことがあるArmadilloの基盤の場合、config保存領域 (/etc/config 以下) に古い設定ファイルが残っているケースがあります。 romfsを更新したので、それにあわせてconfigファイル群も更新する必要があります。Armadilloを起動、ログインしシェルから
# flatfsd -w
と入力すると、romfsの /etc/default のファイルが config 領域に書き込まれます。 flatfsdコマンドの主なオプションは以下の通りです。
空のUSBフラッシュメモリを用意してください。 以下のZIPファイルをダウンロードし、USBメモリ上に展開してください。 USBメモリのルートディレクトリに boot.sh が配置されるようにします。
このファイルにはOpenRTM-aistのサンプル SeqInComp が含まれています。ArmadilloにUSBメモリを挿入すると、自動的にSeqOutCompが起動します。 このSeqInCompと、PC上のSeqOutCompを接続してみます。
PC上でネームサーバを起動しこれを利用するので、USBメモリ上のrtc.confのネームサーバ位の設定を書き換えます。PCのアドレスが仮に 192.168.0.10 であるばあい、rtc.confの corba.nameservers の設定を以下のように書き換えます。
corba.nameservers: 192.168.0.10
PC上でネームサーバを起動します。Windowsの場合は、スタートメニューからOpenRTM-aistのtoolフォルダ内にある「Start Naming Service」から起動します。
「OpenRTM-aist」->「C++」->「」 PCに複数のネットワークインターフェースが存在する場合は注意が必要で、 rtm-naming.bat 内の
OMNIORB_HOST
の値をArmadillo が接続されているネットワークに接続されているインターフェースのIPアドレスにセットする必要があるかもしれません。
OpenRTM-aistのサンプルフォルダ内のSeqInCompを起動します。 ネームサービス同様、PCにネットワークインターフェースが複数ある場合は、SeqInComp.exeと同じフォルダにあるrtc.confを書き換える必要があるかもしれません。
corba.nameservers: 192.168.0.10 corba.endpoints: 192.168.0.10:
ArmadilloにUSBメモリを挿入します。もしくは、USBメモリを挿した状態でArmadilloを起動します。 うまく行けば、Armadillo上でSeqOutCompが起動します。シリアルコンソールをつないでいる場合はPCからArmadilloにログインし、mountコマンドやpsコマンドで状態を確認します。
[root@a240-0 (ttyp0) /home/openrtm]# mount
:中略 /dev/sda1 on /home/openrtm type vfat (rw,nodiratime,fmask=0000,dmask=0022,codepage=cp932,iocharset=euc-jp) [root@a240-0 (ttyp0) /home/openrtm]# ps : 中略 854 root 7396 S < /home/openrtm/rtc/SeqOutComp -f /home/openrtm/rtc.con 855 root 7396 S < /home/openrtm/rtc/SeqOutComp -f /home/openrtm/rtc.con 856 root 7396 S < /home/openrtm/rtc/SeqOutComp -f /home/openrtm/rtc.con 857 root 7396 S < /home/openrtm/rtc/SeqOutComp -f /home/openrtm/rtc.con 858 root 7396 S < /home/openrtm/rtc/SeqOutComp -f /home/openrtm/rtc.con
USBメモリがマウントされ、SeqOutCompが起動していることがわかります。
RTSystemEditorを起動します。「OpenRTM-aist」→「C++」→「tools」->「RTSystemEditor」から起動します。 ネームサービスビューの上部のコンセントのアイコンのボタンをクリックし、上記のPCアドレス (192.168.0.10) を入力しネームサーバいへ接続します。
正常であれば、図のようにSeqInとSeqOutの2つのコンポーネントが見えるはずです。 メニューバーのONボタンをクリックし、中央にエディタを開きます。 これら両方のコンポーネントを、ネームサービスビューから中央のエディタへドラッグアンドドロップします。
8個のポートがあるコンポーネントがそれぞれ起動します。ポート間をRTsystemEditorで接続し、メニューバーの緑の再生ボタンのようなAll Activateボタンを押すと、2つのコンポーネントが緑になりActive化され動き出します。
SeqInコンポーネントのコンソール画面に様々な数字がスクロールして表示されます。 Armadillo上で動いているSeqOutCompからPC上で動いているSeqInCompへデータが送られていることが分かります。
これで、Armadillo上でRTコンポーネントを動作させる方法が何となくわかったのではないかと思います。次は、実際にコンポーネントのクロス開発環境を構築する方法について説明します。
このドキュメントでは、アットマークテクノからリリースされているArmadiilo用の開発環境ATDE2にRTコンポーネントのためのクロス開発環境を構築する方法について説明します。 ここで説明する方法で設定済みの開発環境は ATDE2 for OpenRTM-aist として下記にてリリースされていますので、それを利用する場合は以下に説明する作業は不要です。 また、次の章「OpenRTM-aistのクロスコンパイル」についてもATDE2 for OpenRTM-aistでは実行済みですので不要です。
ATDE (Atmark Techno Development Environment) 2は、Armadillo-200シリーズ用の開発環境です。 実体は、VMware上で動作する Debian GNU/Linux 4.0 (“Etch”)をベースにしたVMイメージです。 使用するにはPCにVMwareをインストールする必要があります。
ATDE2 for OpenRTM-aist は Armadillo-200 シリーズ上で動作する RTコンポーネントを開発するため、ATDE2にOpenRTM-aistと各種ツールを事前にインストールした開発環境です。
ATDEを動作させるにはVMwareをインストールする必要があります。 VMwareはVMware, Incが販売している仮想PC環境で、WindowsやLinux (あるいはMac OS X上)、または独自のOS上で動作します。 VMwareにはいろいろなバージョンがありますが、ここでは無償で利用できるWindows版のVMware Playerを利用します。
まず、VMware Playerのインストーラをダウンロードします。
Webページの手順に従ってVMware Playerのインストーラをダウンロードします。 ダウンロードしたインストーラを起動し、指示に従ってインストールします。
インストール後、再起動を求められますので再起動します。 再起動後、スタートメニューからVMware Playerを起動します。
起動を確認したら、ひとまず右上の×ボタンを押し終了します。
ATDE2 for OpenRTM-aist を以下のリンクからダウンロードします。
説明 | ファイル名 | MD5 | サイズ |
ATDE2 for OpenRTM-aist | atde2_for_openrtm_20121005.zip | cd22a133c1d77a8e8c87c36aad5e6886 | 1776 MB |
なお、オリジナルのATDE2は、以下のアットマークテクノからダウンロード可能です。ATDE2インストールガイドは、ATDE2 for OpenRTM-aist のインストールにおいても参考になりますので、一読することをお勧めします。
※ATDEおよびドキュメントが更新されている可能性があるので、ATDEダウロードサイトでご確認ください。
ダウンロードしたZIPファイルを展開すると、atde2_for_openrtm というフォルダができます。
フォルダの内部を見てみます。atde2.vmx (種類:VMwre構成ファイルとなっている方) がVMwareの構成ファイルです。 このファイルをダブルクリックすると、VMware Player上でこの仮想マシン(VM)が起動します。
前述のように、ATDE2のフォルダ内のatde2 (種類:VMwre構成ファイルとなっている方, 実際のファイル名は atde2.vmx) をダブルクリックするとこのVMが起動します。
もう一つの起動方法としては、スタートメニューから VMware Playerを起動し
から、上記のatde2.vmx を指定する方法があります。
いずれかの方法で起動すると、以下のような画面が現れます。
VMwareの画面上をクリックすると、制御がVMwareに移ります。Enterを押すか、しばらく待つとLinux (Debian) が起動します。 起動すると以下のような画面が現れます。(起動中に画面中央に各種サービスの起動画面が現れ、update-notifierで止まることがあるかもしれませんが、クリックすると消えますのでそのまま進めてください。)
ATDE2はデフォルトでユーザ名 atmark でログインした状態で起動します。 システムは以下のユーザアカウントおよびパスワードが設定されています。
ユーザ名 | パスワード | 権限 |
atmark | atmark | 一般ユーザ |
root | root | 特権ユーザ |
なお、非常に簡単なパスワードしか設定されていませんので、長時間起動しておく場合はパスワードを変更したほうがよいでしょう。 以下、安全な環境下で、開発時のみ短時間起動すると仮定して、上記の設定のまま解説を進めます。
VMがネットワークにアクセスできるか確認します。
アプリケーション->インターネット->Iceweaselウェブ・ブラウザ からWebブラウザを起動します。
URLにopenrtm.org等を入力し、Webページが表示されることを確認します。
ATDE2 for OpenRTM-aist では、以下の設定がすでに行われていますので不要です。 次のRTコンポーネントのクロスコンパイルの項に進んでください。
アットマークテクノが配布しているオリジナルのATDE2を自分で一からセットアップする際の参考にしてください。
ATDE2を利用するために、いくつか必要な事項を設定しておくと便利なのですが、以下の一括設定スクリプトを利用すると、簡単にセットアップができます。 なお、このスクリプトで行なっている詳しい内容についても説明します。
こちら一括設定スクリプトをダウンロードします。 ダウンロードしたスクリプトに実行権限を与え、実行します。
atmark@atde:~$ wget http://svn.openrtm.org/Armadillo/trunk/atde2/tools/atde2setup.sh atmark@atde:~$ chmod 755 atde2setup.sh atmark@atde:~$ ./atde2setup.sh
現在のパスワード (atmark) を求められますので入力します。
atmark@atde:~$ ./atde2setup.sh [sudo] password for atmark: パスワードを入力 : パッケージデータベースの取得 : Do you want to install ssh? (y/n) <- yを入力 : 以降全てyを入力 ワークグループはデフォルトのWORKGROUPでOK WINSの質問に関してはデフォルトのNO : New SMB password: atmark Retype new SMB password: atmark : Stopping Samba daemons: nmbd smbd. Starting Samba daemons: nmbd smbd. atmark@atde:~$
以上で、基本的設定は終了です。以下、スクリプトで行なっている内容を自ら行う場合の作業手順を示します。
公開されているATDE2の環境では、パッケージのリポジトリのURLが古いため、そのままではapt-getなどでパッケージを取得することができません。 以下のように、/etc/apt/soruces.list を編集する必要があります。以降の作業を行うために、この作業は必ず行なってください。
$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.org $ sudo sed -i 's/ftp.jp/archive/g' /etc/apt/sources.list $ sudo apt-get update
sources.list を source.list.orgとしてバックアップを取り、sources.list内の ftp.jp を全て archives に置換しています。 その後、apt-get update でデータベースを更新しています。
必須ではありませんが、sshをインストールしておけば、TeraTermなどでログインして作業を行うことができます。 通常、VMwareのゲストOSからホストOS、またはその逆にコピー&ペーストができないので、ターミナルで接続して作業するほうが便利な場合があります。
$ sudo apt-get install openssh-server # パスワード: atmark を入力 # すべてYと答える
次に、このゲストOSのIPアドレスを調べます。
atmark@atde:~$ /sbin/ifconfig eth0 eth0 Link encap:イーサネット ハードウェアアドレス 00:0c:29:df:22:59 inetアドレス:192.168.0.2 ブロードキャスト:192.168.0.255 マスク:255.255.255.0 inet6アドレス: fe80::20c:29ff:fedf:2259/64 範囲:リンク UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1 RXパケット:70593 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:20438 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:1000 RXバイト:17346973 (16.5 MiB) TXバイト:11133415 (10.6 MiB) 割り込み:18 ベースアドレス:0x2024
192.168.0.2 がこのゲストOSのアドレスです。TeraTermなどで、このアドレスにsshで接続してみます。
TeraTermの場合、known hostにこのホストを追加するかどうか尋ねられますので、Yesと答えて次に進みます。 IDとパスワードをたずれられますので、上と同様にatmark/atmarkと入力します。
なお、DHCP接続の場合、IPアドレスが起動毎に変わる可能性があり、sshで接続する際に毎回IPアドレスを使用する必要があるかもしれません。 その場合、ネットワーク接続方式を「ブリッジ接続」から「NAT」にし、固定IPアドレスを設定すると便利です。 /etc/network/interfaces を以下の例ように書き換えることで固定IPアドレスを設定することができます。
auto eth0 iface eth0 inet static address 192.168.0.2 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 dns-nameservers 192.168.0.1
なお、詳細についてはLinuxおよびDebianの参考書、Webページを参照してください。
VMwareのホストOSがWindowsの場合、ホストOSとゲストOS間でファイルのやり取りをしたいことがよくあります。 例えば、ゲストOSでコンパイルしたバイナリを、Armadilloで実行する際にUSBメモリにコピーする場合、ゲストOSで直接USBメモリを読み書きすることもできますが、Windows上でゲストOSからUSBメモリへファイルをコピーしたほうが便利なこともあります。
ゲストOSにSambaをインストールしておけば、簡単にゲストOSのファイルを操作することができます。
まず、sambaをインストールします。Sambaインストール後に、Sambaのコンフィギュレーションファイル /etc/samba/smb.confのバックアップをとっておきます。
atmark@atde:~$ sudo apt-get install samba atmark@atde:~$ sudo mv /etc/samba/smb.conf /etc/samba.smb.conf.org
ホームの下に、smb.conf という名前で以下の内容のファイルを作成します。
[global] workgroup = WORKGROUP server string = %h server dns proxy = no log file = /var/log/samba/log.%m max log size = 1000 syslog = 0 panic action = /usr/share/samba/panic-action %d encrypt passwords = true passdb backend = tdbsam obey pam restrictions = yes unix password sync = yes passwd program = /usr/bin/passwd %u passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* . pam password change = yes [homes] comment = Home Directories browseable = yes read only = no create mask = 0755 directory mask = 0755 valid users = %S
バックアップをとったファイルの代わりに、上記の内容のファイルを /etc/samba/以下にコピーします。
atmark@atde:~$ cat > smb.conf # 上の内容をコピペ、Ctrl+Dを押す。 atmark@atde:~$ sudo cp smb.conf /etc/samba
atmarkというユーザのパスワードを設定します。
atmark@atde:~$ sudo smbpasswd -a atmark # パスワード: atmark を入力
sambaサービスを再起動します。
atmark@atde:~$ sudo /etc/init.d/samba restart
これで、samba経由でゲストOS上のファイルをWindowsから操作できるようになりました。 Windowsでエクスプローラ(≠インターネットエクスプローラ)を起動します。(マイコンピュータをクリック or Windowsキー+e)
先ほど調べたIPアドレス (上の例では 192.168.0.2) の前に¥マークを2つつけて、エクスプローラのアドレスバーに入力します。
\\192.168.0.2
初回接続時にはIDとパスワードが訊かれますので、先ほど設定したIDとパスワード (atmark/atmark) を入力します。
自分のホームフォルダがatmarkおよびhomeという名前のフォルダとして参照できます。
以上でATDE2の基本的設定は終了です。
ここでは、Armadillo上で実行するRTコンポーネントのビルド方法をについて説明します。 コンポーネントのビルドは、旧式 (RTCBuilder-1.0) のMakefileベースの方法と、新式 (RTCBuilder-1.1以降) のCMakeベースの方法の2通りがあります。
古いRTCBuilderで生成したコンポーネントには、UNIX系システム用のMakefileが付属していました。この場合は、非常に簡単で、環境変数CXXにarm用コンパイラ /usr/bin/arm-linux-gnu-g++ を指定するだけでも可能です。
$ CC=/usr/bin/arm-linux-gnu-g++ make
ただし、ATDE2 for OpenRTM-aist に付属の rtc-make-cross を使用すると、Armadillo-400シリーズでRTコンポーネントをビルドするときなども、同じ方法でビルドが可能です。 ここでは、rtc-make-cross を使用した方法について説明します。
OpenRTM-aistに付属のサンプルコンポーネント SeqOutComp を例に、ソースからクロスコンパイルしてみます。
OpenRTM-aistをインストールすると ${prefix}/share/openrtm-x.y/example/src 以下にサンプルコンポーネントのソースコードがインストールされます。 ATDE2 for OpenRTM-aist では、/usr/arm-linux-gnu/share/openrtm-1.1/example/src/ 以下にソースコードがインストールされています。これをコピーします。
atmark@atde:~$ mkdir tmp atmark@atde:~$ cd tmp atmark@atde:~/tmp$ atmark@atde:~/tmp$ cp -r /usr/arm-linux-gnu/share/openrtm-1.1/example/src/SeqIO . cd SeqIO atmark@atde:~/tmp/SeqIO$ ls Makefile.SeqIn README.SeqOut SeqInComp.cpp SeqOutComp.cpp rtc.conf Makefile.SeqOut SeqIn.cpp SeqOut.cpp component.conf README.SeqIn SeqIn.h SeqOut.h gen.sh
ディレクトリにはSeqInComopとSeqOutCompのソースコードが含まれています。
ここで、コンポーネントをビルド剃るには rtc-make-cross を使用します。 ATDE2 for OpenRTM-aist にすでにインストールされていますが、こちらからもダウンロードできます。
ダウンロードした場合、以下のようにして /usr/bin 等にインストールするとよいでしょう。
$ chmod 755 rtc-make-cross $ sudo install rtc-make-cross /usr/bin
-h オプションで rtc-make-cross のヘルプを見てみます。
atmark@atde:~/tmp/SeqIO$ rtc-make-cross -h Usage: rtc-make-cross -a <arch_name> [make options] -a target architecture name -h print this help Available architectures: arm powerpc
-a オプションでターゲットのアーキテクチャを指定して、makeコマンドの代わりに使用します。利用できるアーキテクチャのキーワードはここでは、arm と powerpc の2種類のようです。 rtc-make-cross は環境にインストールされているクロス開発環境を調べて、どのアーキテクチャのクロスコンパイルが可能かをヘルプで表示します。 ATDE2はデフォルトで arm と powerpc 用のクロス開発がインストールされているので、このように表示されます。Armadillo-200シリーズ用の実行ファイルは arm アーキテクチャとしてコンパイルする必要がありますので -a arm というオプションを指定します。
また、SeqOutComp をコンパイルするには Makefile.SeqOut という Makefile を使用します。makeコマンドでは特定のMakefileを指定するには -f オプションを使用しますので、-f Makefile.SeqOutを指定します。
atmark@atde:~/tmp/SeqIO$ rtc-make-cross -a arm -f Makefile.SeqOut Target architecture is arm (arm-linux-gnu) Toolchain found. CC: /usr/bin/arm-linux-gcc CXX: /usr/bin/arm-linux-g++ AR: /usr/bin/arm-linux-ar LD: /usr/bin/arm-linux-ld rm -f SeqOut.o /usr/bin/arm-linux-g++ `rtm-config --cflags` -c -o SeqOut.o SeqOut.cpp rm -f SeqOut.so /usr/bin/arm-linux-g++ -shared -o SeqOut.so SeqOut.o `rtm-config --libs` rm -f SeqOutComp.o /usr/bin/arm-linux-g++ `rtm-config --cflags` -c -o SeqOutComp.o SeqOutComp.cpp /usr/bin/arm-linux-g++ -o SeqOutComp SeqOut.o SeqOutComp.o `rtm-config --libs atmark@atde:~/tmp/SeqIO$ ls -al SeqOutComp -rwxr-xr-x 1 atmark atmark 283828 2012-09-08 01:32 SeqOutComp
作成された SeqOutComp というファイルがSeqOutCompコンポーネントの実行ファイルです。
作成されたコンポーネントをUSBメモリへコピーします。USBメモリへのコピーには、ATDE2 for OpenRTM-aist に付属の rtc2usbmem コマンドを使用します。
ATDE2 for OpenRTM-aist にすでにインストールされていますが、こちらからもダウンロードできます。
ダウンロードした場合、以下のようにして /usr/bin 等にインストールするとよいでしょう。
$ chmod 755 rtc-2usbmem $ sudo install rtc2usbmem /usr/bin
rtc2usbmemコマンドは、指定したRTコンポーネントとその依存ライブラリを探して、指定したディレクトリへコピーします。また、Armadilloに挿入した際にRTCを自動起動するためのブートスクリプトとrtc.confも指定ディレクトリへコピーします。 RTCが依存するライブラリを調べ、一つ一つコピーする必要が無いので、非常に簡単にArmadilloに挿入するUSBメモリファイルセットを作成することができます。
-hオプションを指定してヘルプを見てます。
atmark@atde:~/tmp/SeqIO$ rtc2usbmem -h Usage: rtc2usbmem -d <dir> -r <rtc> -l <libdir> This script creates a directory to be copied to USB memory for Armadillo execution environment. One or more RTCs can be specified by -r and are copied to rtc directory. Dependent libraries are automatically analyzed and copied to lib directory. boot.sh to launch RTCs and rtc.conf for RTCs are also created. -a Target architecture name -d <dir> Target directory -r <rtc> Target RTC binary -l <libdir> Library search path -x Do not copy RTM related libraries -h Print this help Available architectures: arm powerpc EXAMPLE $ cd my_component_dir $ ls mycomponent mycomponent.so $ rtc2usbmem -d /tmp/usbmem -r mycomponent -l . -l ../deplibdir
オプションの意味は以下のとおりです。
オプション | 意味 |
-a | ターゲットアーキテクチャ名を指定。-rで指定されるRTCのアーキテクチャと同一である必要がある。指定しなければRTCのアーキテクチャが利用される。 |
-d <dir> | ファイルをコピーする先のディレクトリ。既にディレクトリがある場合、削除するかどうか途中で尋ねられる。デフォルトは /tmp/usbmem。 |
-r <rtc> | 対象となるRTコンポーネント。複数指定可能。 |
-l <libdir> | 依存ライブラリを検索するパスを指定。複数指定可能。 |
-x | libRTM,libcoiなどRTミドルウエア関連ライブラリをコピーしない。RTC以外のプログラムとその依存ライブラリファイルセットを作成するときなどに利用。 |
-h | ヘルプの表示。 |
必須なのは、RTCを指定する -r オプションです。ここでは、ホームディレクトリに seqout というディレクトリを作成しそこに必要なファイルセットをコピーすることにします。 実行結果は以下のようになります。
atmark@atde:~/tmp/SeqIO$ rtc2usbmem -r SeqOutComp -d ~/seqout Now Armadillo's USB memory image is created. Target architecture: arm Target directory: /home/atmark/seqout Target RTCs: SeqOutComp Library search path: /usr/arm-linux-gnu Searching lib under /usr/arm-linux-gnu copying /usr/arm-linux-gnu/lib/libRTC-1.1.0.so -> /home/atmark/seqout/lib Searching lib under /usr/arm-linux-gnu copying /usr/arm-linux-gnu/lib/libcoil-1.1.0.so -> /home/atmark/seqout/lib copying /usr/arm-linux-gnu/lib/libuuid.so.1 -> /home/atmark/seqout/lib copying /usr/arm-linux-gnu/lib/libdl.so.2 -> /home/atmark/seqout/lib copying /usr/arm-linux-gnu/lib/libpthread.so.0 -> /home/atmark/seqout/lib copying /usr/arm-linux-gnu/lib/libomniORB4.so.1 -> /home/atmark/seqout/lib copying /usr/arm-linux-gnu/lib/libomnithread.so.3 -> /home/atmark/seqout/lib copying /usr/arm-linux-gnu/lib/libomniDynamic4.so.1 -> /home/atmark/seqout/lib copying /usr/arm-linux-gnu/lib/debug/libstdc++.so.6 -> /home/atmark/seqout/lib copying /usr/arm-linux-gnu/lib/libm.so.6 -> /home/atmark/seqout/lib copying /usr/arm-linux-gnu/lib/libc.so.6 -> /home/atmark/seqout/lib copying /usr/arm-linux-gnu/lib/libgcc_s.so.1 -> /home/atmark/seqout/lib copying SeqOutComp -> /home/atmark/seqout/rtc /home/atmark/seqout/boot.sh created. /home/atmark/seqout/rtc.conf created. NOTE: Edit /home/atmark/seqout/rtc.conf for your environment. Target binaries have been copied to: /home/atmark/seqout
コピーされたファイルを見てみます。
atmark@atde:~/tmp/SeqIO$ cd /home/atmark/seqout/ atmark@atde:~/seqout$ ls -R .: boot.sh lib rtc rtc.conf ./lib: libRTC-1.1.0.so libdl.so.2 libomniDynamic4.so.1 libpthread.so.0 libc.so.6 libgcc_s.so.1 libomniORB4.so.1 libstdc++.so.6 libcoil-1.1.0.so libm.so.6 libomnithread.so.3 libuuid.so.1 ./rtc: SeqOutComp
libディレクトリに依存ライブラリ、rtcディレクトリにRTコンポーネントがコピーされています。
このディレクトリをUSBメモリにコピーしてArmadilloに挿入すると、コンポーネントが自動的に起動します。
コンポーネントのトップディレクトリにCMakeList.txtがある場合は、RTCBuilder-1.1以降で作成されたコンポーネントになります。 ビルドにはCMakeを使用します。CMakeはMakefileやVisual C++用のプロジェクトファイル等様々なプラットフォームで様々なビルドシステムのためのファイルを生成するためのツールです。
Linux上では主にMakefileを生成するために使用されます。ビルド環境の様々な設定を判別し、最適なMakefileを生成します。コマンドは、バッチ的に処理するcmakeと、(テキストベースの)GUIで対話的に処理するccmakeの2つがあります。 RTコンポーネントのクロス開発には rtc-cmake-cross/rtc-ccmake-crossを利用します。
ATDE2 for OpenRTM-aist にすでにインストールされていますが、こちらからもダウンロードできます。
なお、rtc-cmake-cross/rtc-ccmake-cross は中身はrtc-make-crossと同一です。名前を変えると、それぞれの名前どおりの動作を刷るようになっています。ダウンロードした場合、以下のようにして /usr/bin 等にインストールするとよいでしょう。
$ chmod 755 rtc-make-cross $ sudo install rtc-make-cross /usr/bin $ sudo ln -s /usr/bin/rtc-make-cross /usr/bin/rtc-cmake-cross $ sudo ln -s /usr/bin/rtc-make-cross /usr/bin/rtc-ccmake-cross
-hオプションを与えてヘルプを見てみます。
Usage: rtc-cmake-cross -a <arch_name> [cmake options] -a target architecture name -h print this help Available architectures: arm powerpc
ターゲットアーキテクチャをしていする -a オプションを使用するところ以外は、使い方はcmakeとほとんど同じです。 rtc-make-cross同様、サポートしているアーキテクチャが arm と powerpc の2種類あることがわかります。
ここでは、Geofrey Biggs氏作の rtchokusyoaist コンポーネントのビルドを例に取り説明します。 rtchokuyoaistコンポーネントは北陽電機製レーザ測域センサ URG シリーズ用のRTコンポーネントです。URGセンサとArmadilloを組み合わせることで、分散センサコンポーネントを容易に実現することができます。
rtchokuyoaistコンポーネントは次の3つのパッケージをコンパイルする必要があります。
上記のURLから、ZIPボタンを押してダウンロードしてください。
tmark@atde:~/tmp/rtchokuyoaist$ ls gbiggs-flexiport-7ff727e.zip gbiggs-hokuyoaist-3.0.1-0-g69df78b.zip gbiggs-rtchokuyoaist-2.0.0-12-g43f93c7.zip atmark@atde:~/tmp/rtchokuyoaist$ find ./ -name '*zip' -exec unzip {} \; atmark@atde:~/tmp/rtchokuyoaist$ mv gbiggs-flexiport-7ff727e flexiport atmark@atde:~/tmp/rtchokuyoaist$ mv gbiggs-hokuyoaist-69df78b hokuyoaist atmark@atde:~/tmp/rtchokuyoaist$ mv gbiggs-rtchokuyoaist-43f93c7 rtchokuyoaist
まず、flexiport からビルドします。cmakeの習慣として build ディレクトリを作成し、その中でビルドします。
atmark@atde:~/tmp/rtchokuyoaist$ cd flexiport atmark@atde:~/tmp/rtchokuyoaist/flexiport$ mkdir build-cross atmark@atde:~/tmp/rtchokuyoaist/flexiport$ cd build-cross/ atmark@atde:~/tmp/rtchokuyoaist/flexiport/build-cross$ rtc-cmake-cross -a arm .. / Target architecture is arm (arm-linux-gnu) Toolchain found. CC: /usr/bin/arm-linux-gcc CXX: /usr/bin/arm-linux-g++ : 中略 -- Found Doxygen: /usr/bin/doxygen (found version "1.5.1") CMake Error at doc/CMakeLists.txt:8 (message): Sphinx was not found. Set SPHINX_PATH to the directory containing the sphinx-build executable, or disable BUILD_DOCUMENTATION. -- Configuring incomplete, errors occurred! Configure failed. Check CMake options and configuration variables.
どうやらSphinxが足りないようです。ドキュメントは不要なので、BUILD_DOCUMENTATION 変数を OFFに設定してみましょう。
atmark@atde:~/tmp/rtchokuyoaist/flexiport/build-cross$ rtc-cmake-cross -a arm -DBUILD_DOCUMENTATION=OFF ../ Target architecture is arm (arm-linux-gnu) : 中略 -- Configuring done -- Generating done CMake Warning: Manually-specified variables were not used by the project: CMAKE_TOOLCHAIN_FILE -- Build files have been written to: /home/atmark/tmp/rtchokuyoaist/flexiport/build-cross Configure done. Type 'make' and build program.
今度はうまくいったようです。Makefileができたのでmakeします。
atmark@atde:~/tmp/rtchokuyoaist/flexiport/build-cross$ make Scanning dependencies of target flexiport [ 7%] Building CXX object src/CMakeFiles/flexiport.dir/flexiport.cpp.o [ 15%] Building CXX object src/CMakeFiles/flexiport.dir/port.cpp.o : 中略 Linking CXX executable flexiport_udp_example [100%] Built target flexiport_udp_example
これで、libflexiport.so というライブラリファイルが出来ました。 これをシステムのクロス開発環境にインストールします。
atmark@atde:~/tmp/rtchokuyoaist/flexiport/build-cross$ ls src/libflexiport.so* src/libflexiport.so src/libflexiport.so.2 src/libflexiport.so.2.0.0」 tmark@atde:~/tmp/rtchokuyoaist/flexiport/build-cross$ sudo make install Password: [ 69%] Built target flexiport : 中略 -- Installing: /usr/arm-linux-gnu/lib/flexiport/flexiportDepends.cmake -- Installing: /usr/arm-linux-gnu/lib/flexiport/flexiportDepends-noconfig.cmake
flexiport同様にrtc-cmake-crossを実行、ライブラリをビルドします。
atmark@atde:~/tmp/rtchokuyoaist$ cd hokuyoaist/ atmark@atde:~/tmp/rtchokuyoaist/hokuyoaist$ mkdir build-cross atmark@atde:~/tmp/rtchokuyoaist/hokuyoaist$ cd build-cross/ atmark@atde:~/tmp/rtchokuyoaist/hokuyoaist/build-cross$ rtc-cmake-cross -a arm -DBUILD_DOCUMENTATION=OFF ../ Target architecture is arm (arm-linux-gnu) : 中略 -- Build files have been written to: /home/atmark/tmp/rtchokuyoaist/hokuyoaist/build-cross Configure done. Type 'make' and build program. atmark@atde:~/tmp/rtchokuyoaist/hokuyoaist/build-cross$ make Scanning dependencies of target hokuyoaist [ 16%] Building CXX object src/CMakeFiles/hokuyoaist.dir/hokuyo_errors.cpp.o : 中略 [100%] Building CXX object examples/CMakeFiles/hokuyoaist_getid.dir/getid.cpp.o Linking CXX executable hokuyoaist_getid [100%] Built target hokuyoaist_getid atmark@atde:~/tmp/rtchokuyoaist/hokuyoaist
これもライブラリなので、インストールします。
atmark@atde:~/tmp/rtchokuyoaist/hokuyoaist/build-cross$ sudo make install [ 66%] Built target hokuyoaist [ 83%] Built target hokuyoaist_example : 中略 -- Installing: /usr/arm-linux-gnu/lib/hokuyoaist/hokuyoaistDepends.cmake -- Installing: /usr/arm-linux-gnu/lib/hokuyoaist/hokuyoaistDepends-noconfig.cmake atmark@atde:~/tmp/rtchokuyoaist/hokuyoaist/build-cross$
最後にRTコンポーネントであるrtchokuyoaistをビルドします。
atmark@atde:~/tmp/rtchokuyoaist/hokuyoaist/build-cross$ cd ../../rtchokuyoaist/ atmark@atde:~/tmp/rtchokuyoaist/rtchokuyoaist$ mkdir build-cross atmark@atde:~/tmp/rtchokuyoaist/rtchokuyoaist$ cd build-cross/ atmark@atde:~/tmp/rtchokuyoaist/rtchokuyoaist/build-cross$ rtc-cmake-cross -a arm -DBUILD_DOCUMENTATION=OFF ../ Target architecture is arm (arm-linux-gnu) Toolchain found. CC: /usr/bin/arm-linux-gcc :中略 CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (MESSAGE): Could NOT find OpenRTM (missing: OPENRTM_INCLUDE_DIR COIL_INCLUDE_DIR) (Required is at least version "1") Call Stack (most recent call first): /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:288 (_FPHSA_FAILURE_MESSAGE) cmake/Modules/FindOpenRTM.cmake:75 (find_package_handle_standard_args) CMakeLists.txt:39 (find_package) -- Configuring incomplete, errors occurred! Configure failed. Check CMake options and configuration variables.
おや、エラーが出ました。missing OPENRTM_INCLUDE_DIR COIL_INCLUDE_DIR とあるので、これらの変数が上手くセット出来なかったようです。 それぞれOpenRTMとcoilのインクルードディレクトリなので場所は以下のとおりになります。
ですので、以下のように変数を指定します。
$ rtc-cmake-cross -a arm -DBUILD_DOCUMENTATION=OFF -DOPENRTM_INCLUDE_DIR=/usr/arm-linux-gnu/include/openrtm-1.1/ -DCOIL_INCLUDE_DIR=/usr/arm-linux-gnu/include/coil-1.1/ ../
あるいは、ccmake を利用して対話的にこれらの変数を与えることもできて、
atmark@atde:~/tmp/rtchokuyoaist/rtchokuyoaist/build-cross$ rtc-ccmake-cross -a arm -DBUILD_DOCUMENTATION=OFF ../
のように rtc-ccmake-crossを実行して、ccmakeを起動します。
Page 1 of 1 BUILD_EXAMPLES ON CMAKE_BUILD_TYPE COIL_INCLUDE_DIR /usr/arm-linux-gnu/include/coil-1.1 COIL_LIBRARY /usr/arm-linux-gnu/lib/libcoil.so OPENRTM_IDL_DIR /usr/arm-linux-gnu/include/openrtm-./rtm/idl OPENRTM_INCLUDE_DIR /usr/arm-linux-gnu/include/openrtm-1.1/ OPENRTM_LIBRARY /usr/arm-linux-gnu/lib/libRTC.so PROJECT_VERSION 3.0.0 STATIC_LIBS OFF BUILD_EXAMPLES: Build and install examples Press [enter] to edit option CMake Version 2.8.9 Press [ c ] to configure Press [ h ] for help Press [ q ] to quit without generating Press [ t ] to toggle advanced mode (Currently Off)
OPENRTM_INCLUDE_DIR、COIL_INCLUDE_DIRそれぞれの場所でReturnキーを押して、パスを入力します。 cを押しconfigureをします。cを再度押し、次にgを押してMakefileを生成 (generate) します。最後にeを押して対話画面を抜けます。 これで、Makefileが生成されているはずですので、makeします。
atmark@atde:~/tmp/rtchokuyoaist/rtchokuyoaist/build-cross$ make Scanning dependencies of target hokuyoaist_TGT [ 10%] Compiling /home/atmark/tmp/rtchokuyoaist/rtchokuyoaist/idl/hokuyoaist.idl :中略 [ 80%] Building CXX object src/CMakeFiles/rtchokuyoaist.dir/__/idl/hokuyoaistSK.cc.o [ 90%] Building CXX object src/CMakeFiles/rtchokuyoaist.dir/__/idl/hokuyoaistDynSK.cc.o Linking CXX shared library librtchokuyoaist.so [ 90%] Built target rtchokuyoaist Scanning dependencies of target rtchokuyoaist_standalone atmark@atde:~/tmp/rtchokuyoaist/rtchokuyoaist/build-cross$ ls src/ CMakeFiles cmake_install.cmake rtchokuyoaist_standalone Makefile librtchokuyoaist.so
上述の SeqOutComp と同様 rtc2usbmem コマンドを使って、USBメモリにコピーするためのファイルセットを作成します。ターゲットディレクトリは ~/rtchokuyo とします。
atmark@atde:~/tmp/rtchokuyoaist/rtchokuyoaist/build-cross$ rtc2usbmem -d ~/rtchokuyo -r src/rtchokuyoaist_standalone Now Armadillo's USB memory image is created. Target architecture: arm Target directory: /home/atmark/rtchokuyo Target RTCs: src/rtchokuyoaist_standalone Library search path: /usr/arm-linux-gnu Searching lib under /usr/arm-linux-gnu copying /usr/arm-linux-gnu/lib/libRTC-1.1.0.so -> /home/atmark/rtchokuyo/lib Searching lib under /usr/arm-linux-gnu copying /usr/arm-linux-gnu/lib/libcoil-1.1.0.so -> /home/atmark/rtchokuyo/lib :中略 copying src/rtchokuyoaist_standalone -> /home/atmark/rtchokuyo/rtc copying /usr/arm-linux-gnu/lib/libhokuyoaist.so.3 -> /home/atmark/rtchokuyo/lib copying /usr/arm-linux-gnu/lib/libflexiport.so.2 -> /home/atmark/rtchokuyo/lib /home/atmark/rtchokuyo/boot.sh created. /home/atmark/rtchokuyo/rtc.conf created. NOTE: Edit /home/atmark/rtchokuyo/rtc.conf for your environment. Target binaries have been copied to: /home/atmark/rtchokuyo
ご覧のように、rtchokuyoaist コンポーネントの依存ライブラリである、libflexiport.soやlibhokuyoaist.soなどもコピーされています。
~/rtchokuyo ディレクトリ以下のファイルをUSBメモリにコピーし、rtc.confを編集してからArmadilloに挿入するとコンポーネントが起動します。
次章では、USBメモリファイルセットを実際にUSBメモリにコピーしコンポーネントを起動してみます。
この説では、前の章でクロスコンパイルしたコンポーネント SeqOutComp をUSBメモリにコピーしArmadillo上で実行します。 なお、rtchokuyoaistについても作業内容は同じです。
ATDE2上でコンパイルしたコンポーネントをArmadillo上で実行するには、ファイルセットをUSBメモリにコピーする必要があります。 USBメモリをATDE2を実行しているWindows側で認識させファイルをコピーする方法、ATDE2側で直接USBメモリをマウントしてコピーする方法があります。
VM上のATDE2 for OpenRTM-aistは、samba経由でATDE2上のファイルにアクセスできるようになっていますので、
といった手順でファイルセットをUSBメモリにコピーできます。
ただし、USBメモリを抜き取るのは、次の節で述べる手順に従って rtc.confを書き換えてからにしてください。
Linux経由でコピーする方法は、手順が煩雑なので推奨しません。
まず、VMwareの「仮想マシン」->「仮想マシンの設定」からの設定で、USBコントローラが有効になっていることを確認します。
次にVMを起動し、USBメモリを挿入します。VMware Playerでは画面の右下に、接続されているデバイスの一覧が表示されます。このうちどれか一つがUSBメモリのデバイスに対応します。マウスカーソルをアイコン上に置くとバルーン表示されますので確認してください。
USBメモリのデバイスが見つかったら、アイコンを右クリックし接続します。
ATDEでは通常USBメモリは自動的にマウントされます。 ここで、コマンドラインから mount コマンドを入力してUSBメモリのマウントポイントを調べます。
atmark@atde3:~$ mount | grep media /dev/sdb1 on /media/SD type vfat (rw,nosuid,nodev,uhelper=hal,shortname=lower,uid=1000) atmark@atde3:~$
リムーバブルディスクはデフォルトでは /media の下にマウントされます。 ここでは SDメモリは /media/SD にマウントされたことがわかります。
先ほど作成した seqout ディレクトリの内容を、USBメモリにコピーします。
atmark@atde3:~$ cp -r seqout/* /media/SD/
USBメモリをアンマウントします。
atmark@atde3:~$ umount /media/SD
Armadillo上で起動するRTコンポーネントが自分の参照を登録するネームサーバのアドレスをrtc.confに設定します。
ネームサーバは現在作業中のPC(VMではなくWindowsホスト)で起動することにしますので、PCのIPアドレスを調べます。コマンドプロンプトから
> ipconfig
と入力し、PCのIPアドレスを覚えておきます。 ネットワーク・インターフェースが複数ある場合は注意が必要です。 VMwareがインストールされている場合、ほぼ100%複数のネットワーク・インターフェースが存在します。 実際にネットワークにつながっているインターフェースを見つけて、そのアドレスを覚えておいてください。 仮にPCのネットワークインターフェースのアドレスが 192.168.11.16 であったとして、USBメモリ上のrtc.confを以下のように書き換えます。
corba.nameservers: 192.168.11.16
これで設定は完了です。USBメモリを取り外してArmadilloに挿入します。
ここでは、Armadillo上で動作するSeqOutCompと、PC上で動作するSeqInCompを接続してみます。
Windows側のホストには仮想のものも含めて複数のネットワークインターフェースがあります。RTコンポーネントが使用するIPアドレスを固定するために、ホスト側のrtc.confも設定ををこないます。
上述の例ではIPアドレスは192.168.11.16でしたので、rtc.confに次の1行を追加します。
corba.endpoints: 192.168.11.16
Vista以降のWindowsではUACにより C:\Program Files\OpenRTM-aist 以下の rtc.conf を書き換えることはできませんので、その場合 C:\tmpなど適当なフィルダに SeqInComp.exe とrtc.confをコピーして上の1行を追加してください。
次に、以下のようにネームサーバやコンポーネントを起動します。
RTSystemEditorでネームサーバに接続します。
ArmadilloをシリアルケーブルでPCと接続し、PC側でターミナルソフト(TeraTerm等)を起動して、Armadilloをモニタリングしてください。 SDメモリをArmadilloに挿し、Armadilloに電源を入れ起動します。
うまく行けば、PC上のネームサーバにSequenceOutCompという名前のコンポーネントが起動していることを確認できます。
Armadillo 側で起動した SequenceOutCompoと、PC側で起動した SequenceInComp というコンポーネントを接続してみます。
接続完了後、2つのコンポーネントをActivateすると、PC側で起動した SequenceInComp のコマンドプロンプトに連続した様々な数字が表示され、Armadillo の SeqOutCompから数値が送られていることが確認できます。
Armadilloの電源を入れてください。
工場出荷状態のArmadilloは起動可能なカーネルおよびユーザランドが書き込まれてい無いことがあります。 アットマークテクノで配布しているデフォルトのカーネルとユーザランドを書き込んで機能可能な状態にしてからご利用ください。
有効なネットワークにLANケーブルを接続してください。
ArmadilloはデフォルトではDHCPでアドレスを取得してネットワークに接続します。 利用しているLAN上にDHCPがない場合、DHCPサーバを立てるか、Armadilloに固定アドレスを振る設定を行ってくださ。
USBメモリ内のRTコンポーネントを起動するにはArmadilloのUSBコネクタにUSBメモリを差し込む必要があります。USBメモリを挿すタイミングは、Armadillo起動前でも起動後でも構いません。ただし、USBメモリを取り外す際は、ArmadilloのLED横のボタンを押して取り外してください。
必要なファイルが一つでも欠けている場合コンポーネントは起動しません。 Armadilloにログインし、/home/openrtm ディレクトリを確認してみます。
atmark-dist v1.30.0 (AtmarkTechno/Armadillo-240) Linux 2.6.26-at16 [armv5tejl arch] armadillo240-0 login: root Password: root [root@armadillo440-0 (ttymxc1) ~]# ls -R /home/openrtm //home/openrtm: boot.sh* rtc/ rtc1577.log* rtc1709.log* rtc1747.log* lib/ rtc.conf* rtc1688.log* rtc1728.log* /home/openrtm/lib: libRTC-1.1.0.so* libgcc_s.so.1* libomnithread.so.3* libc.so.6* libm.so.6* libpthread.so.0* libcoil-1.1.0.so* libomniDynamic4.so.1* libstdc++.so.6* libdl.so.2* libomniORB4.so.1* libuuid.so.1* /home/openrtm/rtc: SeqOutComp*
上記の例SeqOutCompを動作させるには、このような構成になっている必要があります。
Armadilloにログインして、マウントポイントを確認します。
[root@armadillo240-0 (ttymxc1) ~]# mount /dev/ram0 on / type ext2 (rw) proc on /proc type proc (rw) usbfs on /proc/bus/usb type usbfs (rw) sysfs on /sys type sysfs (rw) udev on /dev type tmpfs (rw) ramfs on /home/ftp/pub type ramfs (rw) /dev/sda1 on /home/openrtm type vfat (rw,fmask=0022,dmask=0022,codepage=cp437,iocharset=iso8859-1)
最後の行、/dev/sda1 が /home/openrtm ディレクトリにマウントされています。 もし、/dev/sda1 がマウントされていない場合、
# mount -t vfat /dev/sda1 /mnt
のようにして手動でマウントしてみます。
起動スクリプトにバグがあり、RTコンポーネントが起動できないケースがあります。 起動スクリプト boot.sh に書いてある手順通りに、シリアル端末からRTCを実行してみる。
Armadilloに複数のネットワークインターフェースがあり、PC側から届かない方のアドレス (Unreachable) がセットされている場合、システムエディタがRTCのプロファイル情報を取得できずにゾンビ表示になります。
Armadillo上で実行するRTC用のrtc.confにendpointを設定してください。
corba.endpoints: 192.168.0.10: # 192.168.0.10: はArmadilloのネットワークインターフェースのアドレス
PCとArmadilloの間にファイヤウォールがある場合、またはArmadilloがNATを介してネームサービスに名前を登録している場合、PC側からはArmadilloに到達することができずにゾンビン表示となります。
ArmadilloをPCと同じセグメント(ネットワーク)に接続して起動してください。
ポートの接続をする際にはコンポーネント同士でポートのオブジェクト参照を交換します。 その際、相手のポートのIPアドレスおよびポートを利用して相手のポートの接続しに行くため、両RTC間が相互に到達可能なIPアドレスである必要があります。
特にPC側はVMwareなどがインストールされており、ネットワークインターフェースをたくさん持つ状態になっています。 たとえば、PC側のRTCが持つVMネットワークのプライベートアドレス 192.168.5.10 を、RTC上のRTCのオブジェクト参照内に埋め込むと、Armadillo側のRTCは 192.168.5.10 にポートの接続をしに行こうとします。この192.168.5.10というアドレスは、VMwareの仮想プライベートネットワーク内でのみ有効なアドレスなので、Armadillo側のRTCは到達し得ないポートに接続しに行こうとし、タイムアウトになるまで試行します。 この時、RTSystemEditorはRTCから応答が返ってこないため固まります。
この場合、PC側のRTCが読み込むrtc.confにendopiintを設定する必要があります。 ipconfig 等のコマンドでPCの実際のLAN上でのアドレスを調べ (仮に150.29.123.123とします)、
corba.endpoints: 150.29.123.123:
のようにcorba.endpointsオプションに指定します。最後のコロン「:」は必ず付けてください。
実行しているRTCと、そのRTCが利用しているライブラリ (Linuxでは.so、WindowsではDLL) のバージョンに不整合がある場合、何らかの操作をすると落ちるケースがあります。 RTCとそのRTCが参照しているライブラリのバージョンを確認してください。
自作のRTCの場合、RTCに実装したロジックにバグがあればRTCは落ちます。 OpenRTM-aistに付属のサンプルRTCは簡単なロジックのものしかありませんので、この原因の可能性は低いでしょう。
OpennRTM-aistのバグの可能性がある場合は、
を添えてメーリングリストにて報告してください。
その他、どうしてもうまくいかない場合は、メーリングリスト ( OpenRTM-users ) で気軽に質問してください。
Armadilloのカーネルとユーザランドをカスタマイズして入れ替える方法について説明します。カーネルに必要なデバイスドライバが入っていなかったり、ユーザランドにアプリケーションを追加したい場合、ここで述べる方法でカスタマイズ・入れ替えを行います。
OS (Operating System) のもっともコアとなる部分をカーネルと呼びます。 カーネル (= OS) は、アプリケーションプログラムに対して、CPU、メモリ、ディスクなどのリソースの分配や管理、ハードウエアへの抽象化されたアクセスの提供等を行います。
原則として、すべてのデバイスはカーネルが提供する、ファイルとして抽象化されたドライバ (デバイスファイル) 経由で、アプリケーションプログラムからアクセスされます。
基本的にハードウエアベンダがそのデバイスドライバを提供するWindowsとは異なり、Linuxでは、一般に配布されているカーネルのソースコード内にほとんどのデバイスドライバが含まれています。 デバイスドライバは、カーネル内に静的に組み込まれるドライバと、モジュールとして個別にコンパイルされ、必要になった時点で読み込むモジュール型のデバイスドライバがあります。
たいていのドライバは、Static としても Module としてもコンパイル可能で、カーネルの設定時に選択できます。
この2種類のドライバはそれぞれメリット・デメリットがあります。
最近のほとんどのLinuxディストリビューション (Debian, Ubuntu, Fedora, CentOSなど)ではほぼすべてのドライバをはじめからモジュール形式でコンパイルしたものをカーネルと一緒に配布しています。 したがって、新しいデバイスを接続した場合でも、カーネルにドライバを追加して自分でコンパイルしなおす、といったことをする必要はありません。
しかし、かつてPCの速度が遅く、メモリが少なかった時代には、自分の環境にあったカーネルを自分でコンパイルすることはLinuxユーザが行う環境設定の第一歩でした。 Armadilloのような組み込みデバイスにおいては、現在においてメモリもディスクスペースも貴重ですので、自分の用途に合ったカーネルを設定・コンパイルする必要があります。
ユーザランドとは、OSが動作するのに必要な部分のうち、カーネル以外の部分を言います。
ユーザランド = OS - kernel
ユーザランドには、
等があります。 Armadilloでは、ユーザランドを圧縮したイメージの状態でFlashメモリに格納し、起動時にRAMに展開してルートファイルシステムとしてマウントし利用します。 ユーザランドにファイルを追加したい、あるいは削除した場合、ユーザランドのイメージを作り直し、Armadilloにダウンロードする必要があります。 ユーザランドは通常10MB程度あり、シリアルポート経由でArmadilloにダウンロードするため、入れ替えには10分程度かかります。 頻繁に入れ替えるのは大変ですので、ユーザランドの入れ替えを考えている場合は、よく計画して行ったほうがよいでしょう。
Armadilloのような組み込みデバイスでは、ディスクスペースは大変貴重です。 一方で、Linuxシステムは起動するだけでも多くのコマンドが必要となります。 そこで、ディスクおよびメモリスペースを節約するために考え出されたのがBusyBoxです。 BusyBoxは、lsやcp, mvなど/binにインストールされているようなコマンド群の代わりを一つの実行ファイルで行います。
Armadilloでは、ユーザランドのコマンドの多くがBusyBoxにより実現されています。
上で説明したカーネルのドライバのうち、静的に組み込まれるドライバはカーネル内部に存在しますが、モジュールドライバはファイルとしてユーザランドに存在します。 Armadilloでは通常以下のディレクトリ
/lib/modules/2.6.26-at16/kernel/drivers # ^^^^^^^^^^^^この部分はカーネルのバージョン
に格納されています。モジュールがインストールされていれば、
$ find /lib/modules/2.6.26-at16/kernel/drivers ./ ./net ./net/wireless ./net/wireless/rt5370sta.ko ./scsi ./scsi/scsi_wait_scan.ko
このように、<device名>.ko というファイルがいくつか見つかるはずです。
カーネルモジュール内部にはカーネルのバージョンが保持されていて、異なるバージョンのカーネルにはモジュールをロードできないようになっています。
カーネルとカーネルモジュールは必ずセットで作成します。 したがって、カーネルモジュールを含むユーザランドとカーネルは原則としてセットで作成する必要があります。
Armadilloのような組み込みLinux環境では、利用できるメモリやディスクに制限があるため、必要最低限のカーネルやユーザランド(種々のコマンド群やアプリケーションを含めてこう呼ぶ) しかインストールしません。
ArmadilloではカーネルもユーザランドもFlashメモリ上に格納され、起動時にRAMにに展開され利用します。起動後にユーザランドに変更を加えても、Flashメモリ上のユーザランドのイメージには変更は反映されないため、ユーザランドに新たなコマンドを加えたり設定を変更したい場合は、PC上でクロス開発し、ユーザランドをイメージ化しArmadilloのFlashメモリにダウンロードする必要があります。
これを行うための環境が Armark Distです。 Atmark Dist は uClinux という MMU (Memory Management Unit) がない組み込み紺ぴぃーた向けのLinuxのためのソースコードベースのディストリビューション uCLinux distが元になっています。 もちろんArmadilloはMMUを搭載したARM9ベースのCPUボードですので、uCLinuxを使う必要はありませんが、uCLinux distの組み込み向けユーザランドを作成する機能を利用し、Armadillo用のカーネルとユーザランドを作成するよう拡張したものを Atmark Distとしてリリースしています。
Armark Distの一般的な使い方は、上述のアットマークテクノの解説をご覧ください。
この解説では、
を利用するために、カーネルおよびユーザランドの再設定および利用方法について説明します。
基本的な手順は atmark-dist 開発者ガイド第3章 に従います。
まずはじめに、Atmark DistとLinuxカーネルをダウンロードします。
アットマークテクノのダウンロードサイトには、全体とデバイスごとのフォルダにAtmark Distとカーネルソースが置かれています。 カーネルソースはデバイス毎に若干異なるようですので、基本的にはデバイス個別のフォルダにおかれているAtmark Distとカーネルソースをセットで利用するとよいでしょう。
以下、作業ディレクトリをホームディレクトリ直下の work というディレクトリにします。(ディレクトリ名は任意ですが、以下便宜上workとします。)
$ cd $ mkdir -p work/atmarkdist $ cd work/atmarkdist $ wget http://download.atmark-techno.com/armadillo-440/source/dist/atmark-dist-20120727.tar.gz $ wget http://download.atmark-techno.com/armadillo-440/source/kernel/linux-2.6.26-at16.tar.gz $ tar xvzf atmark-dist-20120727.tar.gz $ tar xvzf linux-2.6.26-at16.tar.gz
Atmark Distはビルドの過程で、カーネルソースを参照します。Atmark Distがカーネルソースを認識するためには、Atmark Distディレクトリの直下にカーネルのディレクトリが存在する必要があります。 そのため、カーネルソースディレクトリへのシンボリックリンクを張ります。
$ mv atmark-dist-20120727 atmark-dist # 便宜上ディレクトリ名を変える $ cd atmark-dist $ ln -s ../linux-2.6.26-at16 linux-2.6.x # ln -s ../linux-2.6.26-at16 linux-2.6.26でもよい
ディレクトリ構成はこのようになっているはずです。
~/work + atmarkdist + armark-dist + bin + config + : + linux-2.6.x -> ../linux-2.6.26-at16 へのシンボリックリンクをあらかじめ張る + : + vendors + linux-2.6.26-at16
Atmark Distのメニューを起動します。
$ cd ~/work/atmarkdist $ make menuconfig
Vendor/Product では ArmarkTechno、ProductではArmadillo-440を選択する。
に設定。Exitを2回選択し、設定を保存するかきかれるのでOKを選択すると、次はカーネルの設定画面が起動する。
以降、対象とするドライバ毎に説明する。
USBカメラ等を使用するために必要な UVC (USB Video Class) ドライバは 2.6.26 以降で含まれるようになっており、Armadillo-200系の現在のカーネル 2.6.12 では含まれていない。 したがって、UVCデバイスは現在のところ標準では使用できず、最新カーネルにArmadillo用パッチをを当てるなどしてUVCデバイスを含むカーネルを使用する必要がある。
この文書は編集中です。
アットマークテクノのダウンロードサイトからダウンロード可能なカーネルは、Armadillo-400シリーズで動作させるための最低限のドライバのみ組み込まれており、その他のデバイスを利用する場合は自分でカーネルを再コンパイルして組み込む必要があります。
ロボットシステムでよく用いられる北陽電機のレーザ測域センサ URG シリーズも、Armadilloのデフォルトカーネルでは利用することができないデバイスの一つです。
ここでは、URGセンサを動作させるために必要な CDC ACMドライバの組み込み方を説明します。
+ atmark-dist + linux-2.6.x -> ../linux-2.6.?? へのシンボリックリンク + linux-2.6.?? -> 以下は 2.6.26-at16 を仮定しています
上記のディレクトリ構成を仮定します。Atmark-dist を展開したディレクトリ内で
$ make menuconfig
とコマンドを入力すると、以下のような画面が表示されます。
メニュー中央の青い長方形がカーソルです。 カーソルキーで上下に動かし、Enterキーで選択し、配下のサブメニューに入ります。
ここでは、Vendor/Product SelectionおよびKernel/Library/Defaults Selectionメニューを設定します。
Vendor/Product Selectionでは、ターゲットのベンダとプロダクトを指定します。 (SnapGear) Vendorと表示されているところにカーソルを移動し、Enterをします。
ベンダ名はアルファベット順に並んでいるので、カーソルキーで上のほうに行き AtmarkTechno を Enter キーを押して選択します。
次に、プロダクトを選択します。
アットマークテクノの製品名一覧が表示されるので、自分が使用しているプロダクト名 (ここでは Armadillo-440) を選択します。
VendorProduct Selectionメニューを抜け、Kernel/Library/Defaults Selectionメニューを選択します。
まず以下のように、カーネルソースとクロス開発環境およびライブラリを選択します。
次は、このAtmark-dist Configurationの後に、カーネルやユーザランドの設定を行うかどうかの選択をします。
今回は、CDC ACMドライバを組み込むだけで、ユーザランドには手を加えないので、Customize Kernel Settings にのみスペースキーを押してチェックを入れます。
以上、設定が終了したら、Exit でメニューを抜けます。最後に Do you wish to save your new kernel configuration? と尋ねられるので Yes を選択して Atmark-Dist Configurationを終了します。
Atmark-Dist Configurationを終了すると、シェル画面に戻り、コンパイルを開始します。しばらくするとカーネルの設定メニューが表示されます。
Atmark-Dist同様、青い長方形がカーソルで、カーソルキーで上下に移動、Enterまたはスペースキーで選択します。
デバイスドライバを組み込むので、Device Driverを選択します。
下のほうにある USB Support サブメニューに入ります。
CDC ACMドライバは USB Modem (CDC ACM) support というところにあります。
USB Modem (CDC ACM) support にカーソルを持っていき、スペースキーを押します。スペースキーを押すごとに、< >(無印) -> <M>(モジュール) -> <*> (組込ドライバ) のようにマークが変更されます。組込みドライバにする場合は、チェックボックスを以下のように <*> (アスタリスク) に設定します。
カーネルモジュール型ドライバにしたい場合は、チェックボックスを以下のように <M> に設定します。
以上でCDC ACMドライバの設定は終わりです。Exitを何回か選択して Linxu Kernel Configuration を抜けます。
最後にカーネル設定を保存するかどうか尋ねられるので、Yesと答えて終了します。
以上が終了したら、コンパイルを行います。 atmark-dist 直下のディレクトリで make clean と make を行います。 以前コンパイルしたオブジェクトファイルなどが残っている場合があるので、make clean は必ず行ってください。 コンパイルはPCの性能にもよりますが、数分から十数分かかります。
atmark@atde3:~/work/atmarkdist/atmark-dist$ make make -C tools/sg-cksum make[1]: ディレクトリ `/home/atmark/work/atmarkdist/atmark-dist/tools/sg-cksum' に入ります : 数分から十数分 : /home/atmark/work/atmarkdist/atmark-dist/tools/cksum -b -o 2 /home/atmark/work/atmarkdist/atmark-dist/images/linux.bin.gz >> /home/atmark/work/atmarkdist/atmark-dist/images/linux.bin.gz make[1]: ディレクトリ `/home/atmark/work/atmarkdist/atmark-dist/vendors/AtmarkTechno/Armadillo-440' から出ます atmark@atde3:~/work/atmarkdist/atmark-dist$
コンパイルが終了すると、image ディレクトリの下に、linux.bin.gz, romfs.img.gz といったイメージファイルができているはずです。 途中でコンパイルエラーになっている場合、このイメージは作成されませんので、作成されたイメージファイルのタイムスタンプをよく確認してください。
atmark@atde3:~/work/atmarkdist/atmark-dist$ ls -al images/ 合計 43296 drwxr-xr-x 2 atmark atmark 4096 2012-08-19 12:47 . drwxr-xr-x 15 atmark atmark 4096 2012-08-19 12:47 .. -rwxr-xr-x 1 atmark atmark 3617965 2012-08-19 12:47 linux.bin -rw-r--r-- 1 atmark atmark 1764568 2012-08-19 12:47 linux.bin.gz -rw-r--r-- 1 atmark atmark 27803685 2012-08-19 12:47 romfs.img -rw-r--r-- 1 atmark atmark 11071893 2012-08-19 12:47 romfs.img.gz
それぞれ、
となっています。
作成したカーネルとユーザランドのイメージをArmadilloに書き込み(ダウンロード)ます。 (組込みの分野では、ROM領域へプログラムを書き込むことを一般にダウンロードと呼びます。)
カーネルやユーザランドへのイメージの書き込みは以下のサイトが参考になります。
書き込みはLinuxからでも、Windowsからでも行うことができますが、ここでは、Windows用のHermit-At Win32を用いてイメージを書き込む方法を説明します。
PCにシリアルポートがある場合は、PCとArmadilloをシリアルケーブルで接続します。 PCにシリアルポートがない場合、USB-シリアル変換コネクタなどを用いてArmadilloとPCを接続してください。 デバイスマネージャでどのシリアルポートがArmadilloにつながっているか確認してください。
ArmadilloのDCコネクタ付近に4本(2x2)のピンヘッダが出ています。 このうち、逆サイドのLANコネクタやUSBコネクタに近い2ピンをジャンパでショートさせます。 これで、hermitによりROM書き込みモードになります。 この段階ではまだArmadilloに電源を入れないでください。
Hermit-At Win32 WindowsからArmadilloのフラッシュメモリ領域に各種イメージを書き込むためのツールです。 以下のサイトからダウンロードできます。
hermit.exe を起動するとこのようなウインドウが現れます。
まず、使用するシリアルポートを選択します。 ここでは、COM2がArmadilloに接続されているシリアルポートです。
Memmapボタンを押してみてください。PCとArmadilloが正しく接続されており、ArmadilloがHermitのダウンロードモードになっていれば、メモリマップが表示されます。
これから書き換えようとしているのは、kernel のカーネル領域と、userlandのユーザランド領域です。
まず、カーネルの書き換えを行います。 Erase ボタンを押し、Regionのプルダウンで kernelを選択し、実行ボタンを押します。
ダイアログが表示されカーネル領域が削除されます。
次にダウンロードボタンを押し、Image で先ほど作った linux.bin.gz を、Regionで kernel 選択します。
Image の右側の ... ボタンを押すと、ファイル選択のためのダイアログが開きます。ATDE3 for OpenRTM ではsambaが設定されていますので、アドレスバーのところに
\\192.168.5.132 <- ATDE3 for OpenRTMのアドレス または \\192.168.5.132\atmark\work\atmarkdist\atmark-dist\images
のように、ATDEのアドレスを入力します。アカウント名(atmark)とパスワード(atmark)を入力し、先ほど作成したlinux.bin.gzのフォルダにアクセスし、ファイル (linux.bin.gz) を選択します。
linux.bin.gz (拡張子が見えず linux.bin と表示されますが、種類がGZファイルとなっているほう) を選択します。以上が終わったら実行ボタンをクリックします。 書き込みダイアログが表示され、数分でカーネルの書き込みは終了します。
次にユーザランドを書き換えます。 カーネル同様、
を行います。 ユーザランドはファイルサイズが大きいため、書き換えには十数分かかります。
以上で、カーネルとユーザランドの書き換えは終了です。
Armadilloのジャンパピンをオープンにして、電源を再投入します。この時URGセンサはまだ接続しないでください。
URGセンサはUSB Modeとして /dev/ttyACM0 (2つ目以降はttyACM1, ttyACM2, ...) というデバイス名で利用できます。
起動後、rootでログインして、デバイスが存在するかどうか確認してみてください。
[root@armadillo440-0 (ttymxc1) ~]# ls /dev/ttyACM* ls: /dev/ttyACM*: No such file or directory
USGセンサはまだ接続されていないのでまだデバイスファイルは存在しません。 次に、URGセンサを接続してみます。URGセンサをArmadilloのUSBコネクタに接続すると以下のようなメッセージが表示されます。
usb 1-1: new full speed USB device using fsl-ehci and address 4 usb 1-1: device descriptor read/64, error -71 usb 1-1: configuration #1 chosen from 1 choice
CDC ACMドライバをカーネルに直接組み込んだ場合は、/dev/ttyACM0 ができているはずです。モジュールとして組み込んだ場合は、ドラバモジュールをロードする必要があります。デバイスモジュールのロードには modprobe コマンドを使います。
[root@armadillo440-0 (ttymxc1) /etc]# modprobe cdc-acm Using /lib/modules/2.6.26-at16/kernel/drivers/usb/class/cdc-acm.ko cdc_acm 1-1:1.0: ttyACM0: USB ACM device usbcore: registered new interface driver cdc_acm cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters [root@armadillo440-0 (ttymxc1) /etc]# ls -l /dev/ttyACM* crw-rw---- 1 root root 166, 0 Aug 19 14:55 /dev/ttyACM0
以上で、CDC ACMドライバがシステムに組み込まれていることが確認できました。
CDC ACMドライバをカーネルに直接組み込んだ場合は、URGセンサを接続しArmadilloを起動すると自動的にデバイスが利用可能になりますが、モジュールとして組み込んだ場合 modprobe でドライバモジュールを組み込む必要があります。
Armadillo の /etc/config/rc.local にmodprobeコマンドを追加することで、自動時に自動的にモジュールをロードするよう設定します。
[root@armadillo440-0 (ttymxc1) ~]# vi /etc/config/rc.local
viエディタでrc.localのPATH設定を行っている部分の後ろくらいに以下のようなコマンドを入力します。
PATH=/bin:/sbin:/usr/bin:/usr/sbin # ここから if test -f /lib/modules/2.6.26-at16/kernel/drivers/usb/class/cdc-acm.ko; then echo -n "Loading CDC ACM driver" modprobe cdc-acm check_status fi # ここまで
上述したように、/etc/config 以下のディレクトリは保存可能なコンフィギュレーション領域ですので flatfsd コマンドを使って保存することができます。
[root@armadillo440-0 (ttymxc1) ~]# flatfsd -s flatfsd: saving fs to partition 0, tstamp=1 flatfsd: Wrote 5720 bytes to flash in 1 seconds
Armadilloを再起動して、ドライバ組み込まれるかどうかを確認します。
起動中以下のようなメッセージが出るか
Loading CDC ACM driverUsing /lib/modules/2.6.26-at16/kernel/drivers/usb/class/cdc-acm.ko cdc_acm 1-1:1.0: ttyACM0: USB ACM device usbcore: registered new interface driver cdc_acm cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters done
dmesg コマンドを使って確認することができます。
cdc_acm 1-1:1.0: ttyACM0: USB ACM device usbcore: registered new interface driver cdc_acm cdc_acm: v0.26:USB Abstract Control Model driver for USB modems and ISDN adapters
以上でURGセンサのためのCDC ACM USB Modemドライバの組込みは終了です。
ArmadilloでRalink Chipの無線LANアダプタを利用する方法について説明する。 対象とするのは、比較的ポピュラーな Ralink Chipを(RT3070/RT3370/RT5370/RT5372系チップ) 搭載したUSB無線LANインターフェース。
Armadillo-440用のデフォルトのカーネル (linux-a400-1.09.bin.gz) では無線LANに関するオプションが有効になっていないため、無線LANを有効にしカーネルの再コンパイルが必要となる。
上のようなカーネルの設定画面が表示されたら、下記の無線LANデバイスに関するオプションにチェックをつける。
Exitしてカーネルの設定メニューを抜ける。
カーネルの設定画面を抜けると、ユーザランドの設定画面が起動する。
Network Applicationsの設定に入り、下の方の hostap にチェックをいれる。すると、更に下層のメニューが開くので、wpa_supplicant にチェックを入れる。
この他
などのWLAN関係のツールがチェックされていることを念のため確認。
以上が終わったらExitで抜ける。
このままmakeを行うと、madwifi関係のコンパイルでエラーになるため、user/hostap/wpa_supplicant/.config の設定を変更する。
$ vi user/hostap/wpa_supplicant/.config
として、以下のように CONFIG_DRIVER_MADWIFI=y をコメントアウトする。
# Driver interface for madwifi driver #CONFIG_DRIVER_MADWIFI=y # Change include directories to match with the local setup CFLAGS += -I$(ROOTDIR)/$(LINUXDIR)/drivers/net/wireless/madwifi
以上が終了したら、コンパイルを行います。 atmark-dist 直下のディレクトリで make clean と make を行います。 以前コンパイルしたオブジェクトファイルなどが残っている場合があるので、make clean は必ず行ってください。 コンパイルはPCの性能にもよりますが、数分から十数分かかります。
atmark@atde3:~/work/atmarkdist/atmark-dist$ make make -C tools/sg-cksum make[1]: ディレクトリ `/home/atmark/work/atmarkdist/atmark-dist/tools/sg-cksum' に入ります : 数分から十数分 : /home/atmark/work/atmarkdist/atmark-dist/tools/cksum -b -o 2 /home/atmark/work/atmarkdist/atmark-dist/images/linux.bin.gz >> /home/atmark/work/atmarkdist/atmark-dist/images/linux.bin.gz make[1]: ディレクトリ `/home/atmark/work/atmarkdist/atmark-dist/vendors/AtmarkTechno/Armadillo-440' から出ます atmark@atde3:~/work/atmarkdist/atmark-dist$
Ralinkのサイトからドライバのソースコードをダウンロードする。
以下に、Ralinkチップを使用したUSB無線LANデバイスのリストを示す。
RT3070/RT3370/RT5370/RT5372系チップ用ドライバは以下からダウンロード可能。
メーカー | 型番 | VID:PID | Chip |
RT8070系チップ | |||
BUFFALO | WLI-UC-GNM | 0411:01a2 | RT8070V |
LOGITEC | LAN-GMW/DS | 0789:0168 | RT8070V |
LOGITEC | LAN-GMW/PSP | 0789:0168 | RT8070V |
LOGITEC | LAN-W150N/U2 | 0789:0164 | RT8070V |
RT3070系チップ | |||
PLANEX | GW-USMicroN | 2019:ED14 | RT3070L |
PLANEX | GW-USMicroN-G | 2019:ED14 | RT3070L |
PLANEX | GW-USMicro300 | 2019:AB29 | RT3072L |
Logitec | LAN-W150N/U2DS | 0789:0164 | RT3070? |
Logitec | LAN-WN11/U2 | 0789:0164 | RT3070L |
BUFFALO | WLI-UC-GN | 0411:015D | RT3070L |
BUFFALO | WLI-UC-GNHP | 0411:0158 | RT3070L |
BUFFALO | WLI-UC-GNP | 0411:019E | RT3070L |
BUFFALO | WLI-UC-GNT | 0411:015D | RT3070L |
BUFFALO | WLI-UC-GNM | 0411:01A2 | RT3070L? |
BUFFALO | WLI-UC-GNM2 | 0411:01A2 | RT3070L? |
BUFFALO | WLI-UC-GNM2R | 0411:01A2 | RT3070L? |
BUFFALO | WLI-UC-G301N | 0411:01A2 | RT3070L? |
IODATA | WN-G150U | 04BB:0947 | RT3070 |
RT3370系チップ | |||
BUFFALO | WLI-UC-G300N | 0411:00E8 | RT3370 |
BUFFALO | WLI-UC-G300HP | 0411:0148 | RT3370 |
BUFFALO | WLI-UC-GNHP | 0411:0158 | RT3370 |
BUFFALO | WLI-UC-GN | 0411:015D | RT3370 |
BUFFALO | WLI-UC-GNP | 0411:019E | RT3370 |
BUFFALO | WLI-UC-GNM | 0411:01A2 | RT3370 |
Logitec | LAN-W300N/U2 | 0789:0166 | RT3370 |
PLANEX | GW-USMini2N | 2019:AB25 | RT3370 |
RT5370系チップ | |||
BUFFALO | WLI-UC-G300N | 0411:00E8 | RT5370 |
BUFFALO | WLI-UC-AG300N | 0411:012E | RT5370 |
BUFFALO | WLI-UC-G300HP | 0411:0148 | RT5370 |
BUFFALO | WLI-UC-GNHP | 0411:0158 | RT5370 |
BUFFALO | WLI-UC-GN | 0411:015D | RT5370 |
BUFFALO | WLI-UC-GNP | 0411:019E | RT5370 |
BUFFALO | WLI-UC-GNM | 0411:01A2 | RT5370 |
Logitec | LAN-W300N/U2 | 0789:0166 | RT5370 |
PLANEX | GW-USMini2N | 2019:AB25 | RT5370 |
RT2800系チップ用ドライバは以下からダウンロード可能。RT3070/RT3370/RT5370/RT5372系チップ用ドライバで動作するとの情報もあるが詳細は不明。
http://www.ralinktech.com/en/04_support/license.php?sn=5021
メーカー | 型番 | VID:PID | Chip |
RT2800系チップ | |||
BUFFALO | WLI-UC-G300N | 0411:00E8 | RT2800 |
BUFFALO | WLI-UC-AG300N | 0411:012E | RT2800 |
BUFFALO | WLI-UC-G300HP | 0411:0148 | RT2800 |
BUFFALO | WLP-UC-AG300 | 0411:0150 | RT2800 |
BUFFALO | WLI-UC-GNHP | 0411:0158 | RT2800 |
BUFFALO | WLI-UC-GN | 0411:015D | RT2800 |
BUFFALO | WLI-UC-G301N | 0411:016F | RT2800 |
BUFFALO | WLI-UC-GNM | 0411:01A2 | RT2800 |
Logitec | LAN-WN22/U2 | 0789:0162 | RT2800 |
Logitec | LAN-WN12/U2 | 0789:0163 | RT2800 |
Logitec | LAN-W150/U2M | 0789:0164 | RT2800 |
Logitec | LAN-W300N/U2 | 0789:0166 | RT2800 |
Logitec | LAN-W150N/U2 | 0789:0168 | RT2800 |
Corega | CG-WLUSB2GNL | 07AA:002F | RT2800 |
Corega | CG-WLUSB2GNL | 07AA:003C | RT2800 |
Corega | CG-WLUSB300AGN | 07AA:003F | RT2800 |
Corega | CG-WLUSB300GNS | 07AA:0041 | RT2800 |
Corega | CG-WLUSB300GNM | 07AA:0042 | RT2800 |
PLANEX | GW-US300MiniS | 2019:AB24 | RT2800 |
PLANEX | GW-USMini2N | 2019:AB25 | RT2800 |
PLANEX | GW-US300MiniW | 2019:ED06 | RT2800 |
RT2870系チップ | |||
エレコム | LAN-W150N/U2KT | 0789:0168 | RT2870 |
BUFFALO | WLI-UC-G300N | 0411:00E8 | RT2870 |
Logitec | LAN-WN22/U2 | 0789:0162 | RT2870 |
Logitec | LAN-WN12/U2 | 0789:0163 | RT2870 |
Logitec | W150/U2M | 0789:0164 | RT2870 |
Corega | CG-WLUSB2GNL | 07AA:002F | RT2870 |
Corega | CG-WLUSB2GNL | 07AA:003C | RT2870 |
Corega | CG-WLUSB300AGN | 07AA:003F | RT2870 |
PLANEX | GW-USMini2N | 2019:AB25 | RT2870 |
PLANEX | GW-US300Mini | 2019:ED06 | RT2870 |
PLANEX | GW-USMicroN | 2019:ED14 | RT2870 |
ダウンロードしたソースをatmark-distと同じディレクトリに展開する。 なお、ダウンロードしたソースはファイル名の拡張子がbz2のみになっているが実際はtar.bz2圧縮である。
$ tar xvjf 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2 $ mv 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO RT3070 // ディレクトリ名が長いので修正 $ cd RT3070
を当てる。
$ wget http://aaaaa/RT3070.patch $ patch -p1 < RT3070.patch
makeする。 atmark-dist と同じディレクトリ以外に展開した場合、環境変数 ATMARKDIST_DIRに設定してmakeする必要がある。 以下の例では、atmark-dist が /home/atmark/work/atmark-dist にあると仮定している。
$ ATMARKDIST_DIR=/home/atmark/work/atmark-dist make $ ATMARKDIST_DIR=/home/atmark/work/atmark-dist make install
これにより、atmark-dist/romfs以下のディレクトリにカーネルモジュール (rt5370sta.ko) と設定ファイル (RT2830STA.dat) が保存される。
Armadilloに書き込むための romfs イメージを再度作成する。
$ cd /home/atmark/work/atmark-dist $ make image $ ls -al images 合計 45300 drwxr-xr-x 2 atmark atmark 4096 2012-08-12 11:46 . drwxr-xr-x 15 atmark atmark 4096 2012-08-13 01:26 .. -rwxr-xr-x 1 atmark atmark 3626594 2012-08-12 15:54 linux.bin -rw-r--r-- 1 atmark atmark 1769841 2012-08-12 15:54 linux.bin.gz -rw-r--r-- 1 atmark atmark 29314085 2012-08-12 15:54 romfs.img -rw-r--r-- 1 atmark atmark 11603547 2012-08-12 15:54 romfs.img.gz
カーネル linux.bin.gz およびユーザランド romfs.img.gz
hermitなどを立ち上げてromfs.img.gz をユーザランドにダウンロードする。 詳細については、アットマークテクノの以下のページを参照してください。
# wpa_passphrase <SSID>
により、パスフレーズ入力プロンプトが表示されるので、パスフレーズを入力すると以下のように暗号化された psk のキーが出力される。
# wpa_passphrase HOGE # reading passphrase from stdin 4332221111 network={ ssid="HOGE #psk="4332221111" psk=b7752c14f1586911c99a4bbce1ad3921f5bbbb9e62a05dcc8f7be6fae8c2fca5
無線LAN用に /etc/config/interfaces を以下のように修正する。
# /etc/network/interfaces -- configuration file for ifup(8), ifdown(8) auto lo ra0 iface lo inet loopback #iface eth0 inet dhcp iface ra0 inet dhcp pre-up modprobe rt5370sta wpa-ssid MARISA wpa-psk b7752c24f1586911c99a4bbce1ad3921f5bbbb9e62a05dcc8f7be6fae8c2fca5 scan_ssid 0 ap_scan 11
さらに、flatfsd で変更された interfaces ファイルを flatfsd で config 領域に保存する。
# flatfsd -s
再起動し無線LANが動作していることを確認する。
Configuring network interfaces: Using /lib/modules/2.6.26-at16/kernel/drivers/net/wireless/rt5370sta.ko rtusb init rt2870 ---> usbcore: registered new interface driver rt2870 no /sbin/wpa_supplicant found; none killed. ioctl[SIOCSIWPMKSA]: Network is down ioctl[SIOCSIWMODE]: Network is down Could not configure driver to use managed mode 0x1300 = 00064300 ioctl[SIOCSIWAUTH]: Operation not supported WEXT auth param 4 value 0x0 - udhcpc (v0.9.9-pre) started Sending discover... Sending discover... Sending discover... Sending select for 192.168.11.16... Lease of 192.168.11.16 obtained, lease time 86400 done Starting inetd: done
ログイン後、iwconfig, ifconfig などで動作状況を確認できる。
# iwconfig ra0 ra0 Ralink STA ESSID:"MARISA" Nickname:"RT2870STA" Mode:Managed Frequency=2.437 GHz Access Point: 00:3A:9D:DC:7C:6A Bit Rate=270 Mb/s RTS thr:off Fragment thr:off Encryption key:BA10-1A03-2808-3D5E-1F43-2A50-BF10-25A7 Security mode:open Link Quality=100/100 Signal level:-53 dBm Noise level:-74 dBm Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 # ifcnofig ra0 ra0 Link encap:Ethernet HWaddr 00:22:CF:41:6F:4D inet addr:192.168.11.16 Bcast:192.168.11.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:658590 (643.1 KiB) TX bytes:50439 (49.2 KiB)
何らかの理由でモジュールがロードできていない場合、無線LANデバイスは使用できない。
# lsmod (ロードされているモジュールを見る) Module Size Used by Not tainted rt5370sta 752944 1 - Live 0xbf000000
もし、rt5370sta モジュールがロードされていない場合、手動でロードしてみる。
# modprobe rt5370sta または # insmod /lib/modules/2.6.26-at16/kernel/drivers/net/wireless/rt5370sta.ko
モジュールがロードされているのにに、ネットワーク・インターフェース ra0 が起動しない場合、手動で起動してみる。
# ifconfig ra0 up # ifconfig ra0 ra0 Link encap:Ethernet HWaddr 00:22:CF:41:6F:4D inet addr:192.168.11.16 Bcast:192.168.11.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:658590 (643.1 KiB) TX bytes:50439 (49.2 KiB)
ネットワークインターフェースが割り当てられない場合、手動でDHCPクライアントを起動してみる。
# udhcpc -b -p /var/run/udhcpc.ra0.pid -i ra0
この節で使用したファイルを以下からダウンロードできます。
ファイル名 (サイズ) | 説明 | 日付 |
ドライバ設定: カーネルモジュール | ||
rt3070_mod_linux.bin.gz 1,765,638 bytes |
CDC ACM, RT3070系ドライバを組み込んだArmadillo-440用カーネルイメージ。 CMSのシステムの都合上ファイル名が linux.bin_.gz となっています。 |
2012.08.19 |
rt3070_mod_romfs.img.gz 11,594,936 bytes |
CDC ACM, RT3070系ドライバを組み込んだArmadillo-440用ユーザランドイメージ。 CMSのシステムの都合上ファイル名が romfs.img_.gz となっています。 |
2012.08.19 |
rt3070_configs.tar.gz 19,440 bytes |
上記設定をしたLinuxカーネル設定ファイル。 | 2012.08.19 |
クロス開発とは、ターゲットとは異なるアーキテクチャ上でそのターゲット用のバイナリを開発することです。
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コマンドを使って確認してみてください。
atmark@atde:~$ file /usr/arm-linux-gnu/lib/libc-2.3.6.so /usr/arm-linux-gnu/lib/libc-2.3.6.so: ELF 32-bit LSB shared object, ARM, version 1 (ARM), for GNU/Linux 2.4.1, stripped
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用のライブラリは以下のサイトに様々なアーキテクチャ用にまとめて置かれています。
例えば、omniORBは、
以下に置かれています。libomniorb4のパッケージだけでも、これだけあります。
libomniorb4-1_4.1.2-1+b1_alpha.deb 22-Apr-2008 16:47 1.5M libomniorb4-1_4.1.2-1+b1_amd64.deb 13-Apr-2008 22:47 1.4M libomniorb4-1_4.1.2-1+b1_arm.deb 14-Apr-2008 07:47 1.4M libomniorb4-1_4.1.2-1+b1_armel.deb 14-Apr-2008 21:17 1.2M libomniorb4-1_4.1.2-1+b1_hppa.deb 14-Apr-2008 12:32 1.6M libomniorb4-1_4.1.2-1+b1_i386.deb 14-Apr-2008 16:02 1.4M libomniorb4-1_4.1.2-1+b1_ia64.deb 14-Apr-2008 12:32 1.8M libomniorb4-1_4.1.2-1+b1_mipsel.deb 14-Apr-2008 15:47 1.2M libomniorb4-1_4.1.2-1+b1_powerpc.deb 14-Apr-2008 15:47 1.5M libomniorb4-1_4.1.2-1+b1_s390.deb 14-Apr-2008 17:02 1.4M libomniorb4-1_4.1.2-1+b1_sparc.deb 14-Apr-2008 05:47 1.4M libomniorb4-1_4.1.2-1_mips.deb 24-Apr-2008 21:58 1.3M
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ではなくdpkg-crossコマンドを利用します。 なお、apt-getのクロスパッケージ版のapt-crossというコマンドもありますが、ATDE2のベースとなっている Debian Etch にはパッケージとして存在しないので、debパッケージを一つづつダウンロードして dpkg-cross を用いてインストールする必要があります。
dpkg-cross は以下の様に使用します。
wget http://package_url/package_name.deb dpkg-cross -a arm -i pkg_name
OpenRTMをコンパイルするために必要なパッケージは以下のとおりです。
Etch用ARMアーキテクチャ対応のomniORBがリポジトリには存在しますが、omniORBが古くかつ浮動小数点の値の送受信にバグがあるため、自分でソースからコンパイルする必要があります。 i386用パッケージはapt-getで、arm 用パッケージはdpkg-crossでインストールします。
リポジトリからダウンロードできる omniORB-4.0.6は、コンパイル時のオプションの関係で、double型のデータをネットワーク経由でやり取りすると、値が化けるというバグがあります。したがって、omniORBに関してはソースからコンパイルしインストールする必要があります。 omniORB-4.1.6以降ではこのバグの対処がなされているので、再コンパイルする場合は4.1.6以降のバージョンを推奨します。 omniORBのクロスコンパイルの手順をまとめたスクリプトを利用することもできます。(このスクリプトは4.1.6以前、以後を判断して、4.1.6より前のomniORBには自動的にパッチを当てます。)
$ tar xvjf omnioRB-4.1.6.tar.bz $ cd omniORB-4.1.6 $ ./configure --prefix=/usr/arm-linux-gnu CXX=/usr/bin/arm-linux-gnu-g++ CC=/usr/bin/arm-linux-gnu-gcc CXXFLAGS=-s CFLAGS=-s --build=i386-linux-gnu --host=arm-linux-gnu --target=arm-linux-gnu --with-omniorb=/usr/arm-linux-gnu --with-includes=-I/usr/arm-linux-gnu/include $ make clean $ make CC=gcc -C src/tool/omniidl/cxx/cccp $ make CXX=g++ -C src/tool/omniidl/cxx $ make CC=gcc-3.4 -C src/tool/omkdepend $ make $ sudo make install
途中、CC=gcc, CXX=g++ などと指定しているのは、ホスト(i386)環境上で動かす必要のあるomniidlの関連モジュールをコンパイルしているためです。 (omniORBはビルドの途中で、幾つかのIDLファイルをomniidlでコンパイルしますが、omniidl自体がARM用実行ファイルだと実行できないため。)
また、上記のスクリプトを使った場合、
$ tar xvjf omnioRB-4.1.6.tar.bz $ cd omniORB-4.1.6 $ wget http://svn.openrtm.org/Embedded/trunk/Armadillo/atde2/tools/omniorb_crossbuild.sh $ chmod 755 omniorb_crossbuild.sh $ ./omniorb_crossbuild.sh /usr/arm-linux-gnu $ sudo make install
となり、若干手順が簡単になります。
OpenRTM-aistはビルドシステムにautoconf/automakeを利用しているため、configureのオプションを幾つか指定するだけでクロスコンパイル可能です。
$ 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 $ ./configure --prefix=/usr/arm-linux-gnu CXX=/usr/bin/arm-linux-gnu-g++ CC=/usr/bin/arm-linux-gnu-gcc CXXFLAGS=-s CFLAGS=-s --build=i386-linux-gnu --host=arm-linux-gnu --target=arm-linux-gnu --with-omniorb=/usr/arm-linux-gnu --with-includes=-I/usr/arm-linux-gnu/include $ make $ make install
もしくは、OpenRTM用cofnigureスクリプト を利用して、
$ 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がクロス開発環境にインストールされました。 以下のファイルがあることを確認してください。
rtc-make-cross [OPTION]... [make OPTIONS]...
rtc-make-cross はRTコンポーネントのクロスコンパイルを補助するツールです。 rtc-template や RTCBuilder が生成する旧形式の Makefile をサポートしてい ます。
このコマンドは make コマンドのラッパーとして働き、環境変数 CC/CXX/AR/LD をクロスコンパイルに必要なツールへのパスに設定し、make を 実行します。
このコマンドはシステムの /usr 以下の Endebian クロス開発環境を検索し、 クロスコンパイルに必要なツールを見つけます。このコマンドがクロスコンパ イルツールチェーンを見つけるためには、Endibian クロス開発環境が通常のイ ンストールルールに基づき /usr 以下にインストールされている必要がありま す。それぞれのクロス開発環境は arm-linux-gnu, powerpc-linux-gnu といっ た名前でなければなりません。
2つ以上のクロス開発環境が見つかった場合は、使用するクロスコンパイルアー キテクチャを -a オプションを使用して指定する必要があります。インス トールされているクロス開発環境が1種類の場合、その環境が使用されま す。-aでアーキテクチャを指定する必要はありません。
-a で利用可能なアーキテクチャ名は -h オプションでヘルプを表示さ せると確認することができます。
$ rtc-make-cross -h Usage: rtc-make-cross -a <arch_name> [make options] -a target architecture name -h print this help Available architectures: arm powerpc
この環境では、armとpowerpcのクロス開発環境が利用できることがわかります。
上記以外のコマンドラインオプションは、すべて make コマンドに渡されます。 下の例は、make において clean ターゲットを実行します。
$ rtc-make-cross -a arm clean
下の例では、Makefile として Makefile.ConsoleIn を指定します。
$ rtc-make-cross -a arm -f Makefile.ConsoleIn
バグを発見した場合は、<n-ando@aist.go.jp> ご連絡ください。
このコマンドは安藤慶昭 <n-ando@aist.go.jp> により作成されました。
Copyright (c) 2012, Noriaki Ando
rtc-cmake-cross [OPTION]... [make OPTIONS]... rtc-ccmake-cross [OPTION]... [make OPTIONS]...
rtc-cmake-cross はRTコンポーネントのクロスコンパイルを補助するツールで す。RTCBuilder が生成する新形式の CMake (CMakeList.txt) をサポートして います。
このコマンドは cmake および ccmake コマンドのラッパーとして働きます。ク ロス開発環境を自動的に調査し、cmake でのクロスコンパイルに必要な、いわ ゆる ツールチェーンファイル を生成します。 cmake/ccmake に対して -DCMAKE_TOOLCHAIN_FILE オプションでツールチェーンファイルを cmake/ccmake に渡し実行します。
このコマンドはシステムの /usr 以下の Endebian クロス開発環境を検索し、 クロスコンパイルに必要なツールを見つけます。このコマンドがクロスコンパ イルツールチェーンを見つけるためには、Endibian クロス開発環境が通常のイ ンストールルールに基づき /usr 以下にインストールされている必要がありま す。それぞれのクロス開発環境は arm-linux-gnu, powerpc-linux-gnu といっ た名前でなければなりません。
2つ以上のクロス開発環境が見つかった場合は、使用するクロスコンパイルアー キテクチャを -a オプションを使用して指定する必要があります。インス トールされているクロス開発環境が1種類の場合、その環境が使用されま す。-aでアーキテクチャを指定する必要はありません。
-a で利用可能なアーキテクチャ名は -h オプションでヘルプを表示さ せると確認することができます。
$ rtc-make-cross -h Usage: rtc-make-cross -a <arch_name> [make options] -a target architecture name -h print this help Available architectures: arm powerpc
この環境では、armとpowerpcのクロス開発環境が利用できることがわかります。
上記以外のコマンドラインオプションは、すべて cmake/ccmake コマンドに渡 されます。下の例は、buildディレクトリを作成し、そこでcmakeを実行します。
$ mkdir build $ cd build $ rtc-cmake-cross -a arm ..
下の例では、cmake に対して変数 OPENRTM_INCLUDE_DIR をコマンドラインから指定して ccmake を実行します。
$ rtc-cmake-cross -a arm -DOPENRTM_INCLUDE_DIR=/usr/openrtm-1.1 ..
バグを発見した場合は、<n-ando@aist.go.jp> ご連絡ください。
このコマンドは安藤慶昭 <n-ando@aist.go.jp> により作成されました。
Copyright (c) 2012, Noriaki Ando
rtc2usbmem [OPTION]...
rtc2usbmem はクロスコンパイルされたRTコンポーネントを、USBメモリやSDメ モリカードにコピーして実行するため、指定されたディレクトリへRTコンポー ネントのコピー、依存ライブラリのコピー、rtc.confの生成、起動スクリプト のコピーを行います。
指定されたRTコンポーネントの実行ファイルを解析し、依存しているライブラ リをクロス開発環境から検索します。検索された依存ライブラリファイルは、 OpenRTM-aistのライブラリやRTコンポーネントとともに、指定されたディレク トリへコピーされます。
実行するターゲット上にあらかじめライブラリをインストールしておく必要は なく、指定されたディレクトリにコピーされたライブラリのみでRTコンポーネ ントを実行することができます。
このコマンドはシステムの /usr 以下の Endebian クロス開発環境を検索し、 クロスコンパイルに必要なツールを見つけます。このコマンドがクロスコンパ イルツールチェーンを見つけるためには、Endibian クロス開発環境が通常のイ ンストールルールに基づき /usr 以下にインストールされている必要がありま す。それぞれのクロス開発環境は arm-linux-gnu, powerpc-linux-gnu といっ た名前でなければなりません。
2つ以上のクロス開発環境が見つかった場合は、使用するクロスコンパイルアー キテクチャを -a オプションを使用して指定する必要があります。インス トールされているクロス開発環境が1種類の場合、その環境が使用されま す。-aでアーキテクチャを指定する必要はありません。
-a で利用可能なアーキテクチャ名は -h オプションでヘルプを表示さ せると確認することができます。
$ rtc2usbmem -h Usage: rtc2usbmem -d <dir> -r <rtc> -l <libdir> : : 略 : Available architectures: arm powerpc
この環境では、armとpowerpcのクロス開発環境が利用できることがわかります。
バグを発見した場合は、<n-ando@aist.go.jp> ご連絡ください。
このコマンドは安藤慶昭 <n-ando@aist.go.jp> により作成されました。
Copyright (c) 2012, Noriaki Ando