環境構築(1)

まずは動かしてみるべく、インストール作業を行いました。なかなかに難航したのですが、なんとかインストールまで完了しました。ただし、これだけで土日をまるまる2日、つぶしてしまいました・・・ちゃんと動かしてみるのは来週になりそうです。

環境としては、

・Linux : Fedora 11
・RTAI-Lab :  3.7.1

です。

「FreeHILSはさておき、完全フリーであるScilab+RTAI-Labにてリアルタイムシミュレーション環境を構築したい!」という方のために、作業手順を書いておきます。

何をやるのか?

作りたい環境としては、次の形となります。

freehils03_00

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=0
timeout=30
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Fedora (2.6.29.4)
root (hd0,0)
kernel /vmlinuz-2.6.29.4 ro root=/dev/mapper/vg_dellrt-lv_root rhgb quiet
initrd /initrd-2.6.29.4.img
title Fedora (2.6.29.4-167.fc11.i686.PAE)
root (hd0,0)
kernel /vmlinuz-2.6.29.4-167.fc11.i686.PAE ro root=/dev/mapper/vg_dellrt-lv_root rhgb quiet
initrd /initrd-2.6.29.4-167.fc11.i686.PAE.img

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を動かして簡単なシミュレーションを実行することにします。