環境構築(1)
まずは動かしてみるべく、インストール作業を行いました。なかなかに難航したのですが、なんとかインストールまで完了しました。ただし、これだけで土日をまるまる2日、つぶしてしまいました・・・ちゃんと動かしてみるのは来週になりそうです。
環境としては、
・Linux : Fedora 11
・RTAI-Lab : 3.7.1
です。
「FreeHILSはさておき、完全フリーであるScilab+RTAI-Labにてリアルタイムシミュレーション環境を構築したい!」という方のために、作業手順を書いておきます。
何をやるのか?
作りたい環境としては、次の形となります。
Linuxマシン1:モデリング環境(Scicos + RTAI-Lab)
Linuxマシン2: リアルタイムノード(RTAI-Labでコンパイルしたモデルを実行)
RTAI-Labは、いまのところLinuxしかサポートしていません。そこで、どうしてもLinuxマシン上でモデリングする必要があります。そのため、ScicosもRTAI-Labも、Linux上で構築することになります。
また、Linuxマシンは2つ必要ですので、RTAI-Labはマシン2つにインストールする事になります。
ところが、私のところには、遊んでいるPCは1台しかありませんでした。そこで、次のようにしました。
・Linuxマシン1 : VMWare Server2上に構築した仮想マシン
・Linuxマシン2 : 古いDELLのマシン
このLinuxマシン1は、リアルタイム動作ではありません。どうせリアルタイム動作させないのであれば、VMWare上に環境構築出来ると便利です。
このVMWareというのは、1台の実PCの中に、仮想のPCを何台も作れてしまうという便利なソフトです。最近は、VMWare Server2というものが無償で公開されています。これを使えば、無駄に実PCを増やさなくっても、Linuxマシン1をVMWareの中に作れてしまいます。これは、とても便利な事です。
私の所では、1台の物理PCの中に、情報共有wiki用の仮想マシン、バグトラッキングシステム用の仮想マシン、バージョン管理システム用の仮想マシン、テストケース管理システム用の仮想マシン、など、いろいろな仮想マシンが動いています。どれも、レスポンスに特に不満はありません。これはオススメです!
なお、VMWare Server2にはインストーラに問題があるようです。日本語の含まれるパスにインストーラをおいておくと失敗するようなので、Cドライブ直下にでもインストーラを置いておくと良いでしょう。
以降では、「RTAI-Labの構築」と「Scicosの構築」の2種類を実施します。私は、Linuxマシン1、Linuxマシン2ともに同じ作業を行いました。
RTAI-Labの構築:Linuxインストール
まずは、RTAI-Labの構築を行います。そのために、Linuxのインストールを行いましょう。
私はFedora 11 というディストリビューションを使用しました。とても良く出来たディストリビューションなので、とくにインストールに困る事は無いかと思います。
インストールパッケージの選択時には、とにかくあらゆるものを全部インストールするようにしました。こうしておけば、後々面倒がなさそうですから。
なお、VMWareを使用する場合は、次の点に注意してください。
OSの種類は、Other 2.6x linux (32bit) とします。
仮想ハードディスクの容量は、デフォルト設定の8GBだと不足します。32GBくらいあったほうがいいです。
その他、Fedoraのインストール方法については、ネットにたくさん情報が転がっていますので、そちらを参照してください。
RTAI-Labの構築:Linuxカーネルへのパッチあて
次に、Linuxカーネルをリアルタイム化するべく、パッチを当てます。
まずは、rtai 3.7.1 および、Linuxカーネルの2.6.29.4をダウンロードしました。
freehils というユーザーでダウンロードしたため、これらのファイルは /home/freehils というディレクトリにあります。ここで次のコマンドを実行していきました。
su - (root のパスワードを入力)
これで、rootユーザーとしてログインできました。
cd /usr/src tar --bzip2 -xvf /home/freehils/rtai-3.7.1.tar.tar rm -f rtai ln -fs rtai-3.7.1 rtai tar --bzip2 -xvf /home/freehils/linux-2.6.29.4.tar.bz2 rm -f linux ln -fs linux-2.6.29.4 linux
これで、RTAIおよびLinuxカーネルのソースコード展開が終了です。
cd /usr/src/linux patch -p1 < /usr/src/rtai/base/arch/x86/patches/hal-linux-2.6.29.4-x86-2.4-01.patch
これでパッチがあたりました。(注:arch以下にはx86, i386などがあります。i386は、32ビットオンリーの対応ですが、x86は32ビット、64ビットともに対応しています。最新のRTAIでは、x86をメインにサポートするようになっています)
cp -f /boot/config-2.6.29.4-167.fc11.i686.PAE .config make menuconfig
こうすると、Linuxのカーネル構築オプションが表示されます。ここで、次のオプションに注意します。
・General setup 以下の、Prompt for development and/or incomplete code/drivers にチェックが入っている事を確認します
・トップ項目の、Enable loadable module support にチェックが入っている事を確認します
・Enable loadable module support 以下の、Module versioning support のチェックが外れている事を確認します
・Processor type and features以下の、 Preemption Model以下にて、No Forced Preemption にチェックを入れます
・Processor type and features以下の、Interrupt pipeline にチェックが入っている事を確認します
・Processor type and features以下の、Maximum number of CPUsを 4 にします。
・Processor type and features以下の、check for P4 thermal throttling interruptのチェックを外します
ちなみに、最後の2つは、こうしないとコンパイルエラーが発生します。それ以外の項目は、RTAIのドキュメントにて指定されている内容です。
これらが済んだら、オプション設定は完了です。最後に、トップ項目の、
Save and Alternate Configuration File
を選択してOKしてから、Exitして終了します。
make clean
make
make modules_install
make install
として、Linuxカーネルをコンパイルします。これらが済んだら、早速コンパイルしたカーネルが使われるようにしましょう。
/etc/grub.conf というファイルを編集し、
default=1
という行を、
default=0
と変更します。
ここでいったん再起動します。
shutdown -r now
RTAI-Labの構築:依存ライブラリの構築
RTAI-Labは、「MESA Library」と、「EFLTK」という2つのライブラリに依存しています。
そこで、これらの入手を行います。
MESA Libraryは、ホームページから、MesaLib-6.2.tar.gz というファイルをダウンロードします。/home/freehils にダウンロードしましたので、
cd /home/freehils tar zxvf MesaLib-6.2.tar.gz cd Mesa-6.2 make linux-x86-static make install
とすることで、コンパイル&インストールが完了します。make install とすると、なにやら質問が出てきます。しかし、これらに対してはすべて Enter で大丈夫です。
EFLTKは、バージョン管理システムからチェックアウトします。
svn co https://ede.svn.sourceforge.net/svnroot/ede/trunk/efltk
ところが、このままコンパイルすると、コンパイルエラーが発生してしまいます。そこで、一部変更することにします。
efltk というディレクトリの下にある、 src/core/filename_list.cpp の、
#elif HAVE_SCANDIR && !defined(__sgi) (コメントが3行) return scandir( dir, list, 0, (int(*)(const void*,const void*))sort);
という所でエラーが出てしまいます。そこで、次のように修正しました。
#elif HAVE_SCANDIR && !defined(__sgi) (コメントが3行) return scandir( dir, list, 0, alphasort );
本来の処理ではなくなってしまいますが・・・ファイルの並び順なんて本質的な部分ではありません。ですから、気にしないことにしましょう!
これらの修正が面倒なかたは、こちらのファイルをダウンロードして、次のようにしてください。
tar --bzip2 -xvf efltk.tar.bz2
ソースコードの準備が整ったら、次のコマンドを実行します。
cd /home/freehils/efltk autoconf ./configure --disable-mysql --disable-unixODBC ./emake ./emake install
これで完了です。
RTAI-Labの構築:RTAI-Lab本体のコンパイル
まずは次のコマンドを実行します
cd /usr/src/rtai make menuconfig
ここでは、特に設定することはありませんので、そのまま進めます。
すると、自動的にコンパイルが始まるのですが、途中でエラーが出てしまいます!
原因についていろいろと考えてみたのですが、よく分かりませんでした。ですが、とりあえず対処療法は出来そうです。
/usr/src/rtai というディレクトリに、configure というファイルが出来ています。どうも、これがまずい様子です。
19827行目にある、
. $RTAI_KCONFIG_FILE
という部分を見つけて、
. /usr/src/rtai/.rtai_config
と書き換えてしまいます。この作業が面倒な方は、こちらのファイルをダウンロードしてから、/usr/src/rtaiに保存し、次のコマンドを実行してください。
rm -f configure gzip -d configure.gz chmod +x configure
ただし、これが通用するのは32ビット版のFedora 11 だけだと思われます。ほかの環境であれば、上記のとおり手で書き換えてください。
そのうえで次のコマンドを実行することにより、環境構築が完了します。
./configure make make install
ScisosLabの構築:ScicosLab本体のコンパイル
こちらも、ソースコードから構築することにします。
まず、依存していると思われるライブラリをインストールしていきます。少々お行儀がわるいのですが、次のようにして手当たり次第にインストールを行うことにしました。
yum install 'vte*' yum install 'pvm*' yum install 'tcl*' yum install 'tk*' yum install 'gtk*'
これらを実行して、提示されたパッケージはすべてインストールしました。
次に、ScicosLabのページから、scicoslab-gtk_4.3.orig.tar.gzをダウンロードします。これが/home/freehilsにあるものとします。
cd /home/freehils tar zxvf scicoslab-gtk_4.3.orig.tar.gz
としてソースコードを展開します。
cd /home/freehils/scicoslab-gtk-4.3 ./configure make all make install
とすると、ScicosLabのインストールは完了です。
ScicosLabの構築:RTAI-Labのライブラリインストール
RTAI-LabのライブラリをScicosLabで使用できるようにします。
cd /usr/src/rtai/rtai-lab/scicoslab/macros
とします。本当は、ここでいきなり make install 出来るはずなのです。しかし、RTAI-LabのScicosLabへの対応はイマイチのようで、ファイル Makefile を変更する必要があります。
SCILAB_DIR = /usr/lib/scicoslab-gtk-$(SCILAB_VERSION)
のところを、
SCILAB_DIR = /usr/lib/scicoslab-$(SCILAB_VERSION)
とします。次に、
cd $(CONTRIBDIR); scicoslab -nw -f builder.sce
のところを、
cd $(CONTRIBDIR); scilab -nw -f builder.sce
とします。
そして、次のコマンドを実行します。
PATH=$PATH:/usr/realtime/bin make install make user
ここまでの作業は、root で行って来ました。ここで、freehilsユーザーに代わってから、make userします。
su freehils
cd /usr/src/rtai/rtai-lab/scicoslab/macros
make user
こうすることで、ユーザー freehils 用の設定も行われました。
最後の調整
最後に、いくつか調整を行います。
まず、次のコマンドを実行して、GLIBC(C言語のランタイムライブラリ)のStatic版をインストールします。これは、モデルをリアルタイム実行する際に必要になります。
yum install 'glibc-*'
そして、ホームディレクトリ(/home/freehils/ )にある .bashrcに、次の行を最後尾に追加します。これは、RTAI-Lab関連のあるディレクトリにパスを通す事で、今後簡単にRTAI-Labを実行できるようにするための処置です。
PATH=$PATH:/usr/realtime/bin LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib export LD_LIBRARY_PATH
これで、完了です。
次回
来週は、いよいよRTAI-Labを動かして簡単なシミュレーションを実行することにします。