マイクロPCとリアルタイムOS(RTAI)
  目  次
1 はじめに
2 概  要
3 API解説
  5節 スケジューラ
  6節 タスク生成とタイマー 
  IPC(列挙)
4 作  成
5 Download
6 SquashfsによるROM化
7 LiveUSB/LiveNET
 はじめに
 RTAI (Real-Time Application Interface)は、DIAPM(Department of Aerospace Engineering of Politecnico di Milano)で開発され、http://www.rtai.org/でオープンソースプロジェクトとして公開されている。
 もともとAdeosと呼ばれるナノカーネル上にLinuxカーネルとRTOSを実装ししたようであるが、これがRtLinuxのパテントを避けることができることから、FreeなGPLとして発展したようです。
 概  要
 RTAIはAdeosのひとつの発展形としてできた、商用 RTLinuxに対抗するものです。 RtLinuxにも Freeなものがありますが、実用的には有償の RtLinux Pro以降になります。 また肝心の割り込み手法は 米国内特許になっています。ならば、FreeでありGPLなRTOSを作ろうということで作られたのがRTAIである(らしい)。
  • FreeでありLGPLである。
  • 豊富なAPI郡。豊富というよりはバラエティーに富んだAPI群というべきか。~rtai-3.4/base以下を参照してください。
  • RtLinuxの割り込み機構を避けるため、ソフトウエアPICというべきものをLinux-kernelとハードウエアの間に置く。これをpicokernelと呼ぶ(らしい)。
  • RtLinuxと同様にカーネルモードだけではなくユーザモードでのRTタスクの記述もできる。
  • RTプロセスでもUDP/IPは使用可能。(ユーザモードでプログラム可能とはいえ、大半のシステムコール がリアルタイム対応になる訳ではない。それでも良ければtcp/ipはカーネルスペースでも使えるが。)
 いずれにしても、マイクロPCを用いればディスクレスの本格的なフリーのRTOSが簡単に作れることにちょっと感動。
 これを Debian を使用してVIA C3(Eden) 667Mhzにインストールし、256Mbのフラッシュメモリで動作させる。
使用マイクロPCは HighTechSysem 製 EES3610 +メモリ128Mb + CF256Mbのディスクレスマシン。 
3 API解説
  3.1 5節 スケジューラ
  3.2 6節 タスク生成及びタイマー
  3.3 IPC(列挙しただけ)
4 作  成
CF版 debian-linux の作成方法は ここ にあります。 このCFのカーネル部分に picokernel に相当する部分の充当をしなければならない。
 このためkernel-2.6.17に対して ~rtai-3.4/base/arch/i386/patch/ 以下にある該当するpatchファイルでpatchを当てる。 続いて~rtai-3.4直下で以下を行います。
make menuconfig
make all
make install
 もしdefaultのままなら/usr/realtimeにテストプログラムとkernel moduleが出来上がる。適宜必要なmoduleをinsmodして使うことになる。
 インストールされているプログラム類。
/usr/realtime       RTAI本体
~rtai-3.4          上記ソース類
~showroom           小さな使用例たくさん
 
5 DOWNLOAD
 まず、基になるDebian3.1-kernel-2.6.17.14、RTAIパッチ済みの最小システムを ここ から持ってくる。この中にRTAIの基本的なすべてのものがコンパイル済みで含まれています。
内容はDebianのインストールを可能とする最小のシステムおよびRTAIのシステムモジュール(/usr/relatime)(~rtai-3.4/)と参考プログラム(~showroom/)のみが入っています。(注意)正味256Mbあります。
 CFはbuffalo RCF-X 256MBを対象にして、IDE(1,1)2番目のチャンネルのマスターにアサインしています。
 ダウンロードしたファイルはCFのイメージそのものですから、書き込み可能なLinuxマシンにてddコマンドでCFに書き込んでください。(これはターゲットでは/dev/hdcになります。)
 なお、"root"のpasswdおよびuser"admin"のpasswdは共に"admin01"です。 実行は/usr/realtimeに実行性能を測るサンプルが、~showroot/には小さなサンプルがあり、その中に runファイルがあります。
当該ディレクトリに移動して
./run
で動作します。
もし rtf が必要な場合は
#!/bin/bash
      for n in `seq 0 9`
      do
          f=/dev/rtf$n
          mknod -m 666 $f c 150 $n
      done
のようなshellプログラムを実行してください。
6 SquashfsによるROMファイル化
 Flashメモリは書き換え回数に上限があります。書き換えの必要なファイルはtmpfsとしてRAMDISKでの処理になります。
 Debian4.0では256Mbを超えそうなことと、Flashメモリの特性を考慮して、Squashfsに変更することにしました。この基になるのはDebian LiveCDです。

 簡単に手順を説明すると、LiveCDのisolinuxをgrubへ変更し、改めてDebia4.0で作成したカーネルvmlinuxの入れ替えとinitrd.imgの/lib/modules以下の入れ替えを行います。(これをliveCFとする。)
 次に、filesystem.squashfsを解凍して別のパーティションにルートファイルシステムを作成し、同様にカーネルを入れ替えます。これにgrubを追加すれば自立的にブートできるパーティションが出来上がります。
 ブートアップしてrtai-3.5をインストールし、テストしながら必要なモジュールがあればapt-get install xxxで供給し、全てのテストを完結する。できあがったファイルシステムをmksquashfsでfilesystem.squashfsに戻し、liveCFのfilesystem.squashfsと入れ替える。

 こうしてできあがったliveCFを立ち上げるとパスワード等を設定していないので、いきなりユーザcasperでlogin状態になります。

ファイル構成は次のようになります
      live:~# df
      Filesystem      1K-blocks    Used    Available  Use%   Mounted on
      tmpfs             55556         0       55556     0%   /lib/init/rw
      udev              10240        40       10200     1%   /dev
      tmpfs             55556         4       55552     1%   /dev/shm
      rootfs           145476     93060       52416    64%   /
      /dev/hdc1        120807    108722        5848    95%   /live_media
      tmpfs             55556      3140       52416     6%   /cow
      tmpfs             55556         0       55556     0%   /tmp
      live:~#
ここでrootfsは圧縮されたルートファイルシステムです。/live_mediaはCFの内容そのままです。ここでは128MbのCFを使用しています。rootfsはReadOnlyですから書き換えの必要があるものは/cowにまとめられています。
      live:~# ls -l /cow
      total 0
      drwxr-xr-x 2  root  root    60  2007-07-21 07:43 cow
      drwxr-xr-x 8  root  root  1480  2007-07-21 09:59 etc
      drwxr-xr-x 4  root  root    80  2007-07-21 09:59 home
      drwxr-xr-x 3  root  root    60  2007-07-21 07:44 lib
      drwxr-xr-x 2  root  root    60  2007-07-21 07:43 live_media
      drwxrwxrwt 2  root  root   200  2007-07-21 07:43 tmp
      drwxr-xr-x 3  root  root    60  2007-07-21 07:43 usr
      drwxr-xr-x 7  root  root   140  2007-07-21 07:44 var
      live:~#
これらのファイルはシステム終了時にCFにセーブしましょう。とはいえ、128Mbではその余裕はありませんが。

 このLiveCFはここにあります。

補足
suへの移行法
      $ sudo passwd
      Enter new UNIX passsword: xxxxxxxx
      Retype new UNIX password: xxxxxxxx
      $ su 
      Password: xxxxxxxx
      #
 なお、ここで使用されているunionfsは実用性の点からaufsへ変更しましょう。
7 Live-USB
 多くのマシンで動作可能にするもう一つの方法としてLiveUSBがあります。上記LiveCFのローダをsyslinuxに置き代えたUSB版のLiveUSB-Rtaiはここにあります。なお、このLiveUSBはLive−Helperで作成したものです。また、このunionfsはaufsに変更してあります。
 Live-NET
 grub->isolinux->syslinuxと進んできて、いよいよNetworkBootにたどり着きました。NetworkBootも(Intel提唱PXEに限れば) ローダーがpxelinuxになるだけで後は同じです。Netで結ばれた多数の端末マシンの一括制御、一括修正、WakbeOnLanを使えばリモートで全て操作可能で あり、多端末のデータギャザリング等では威力を発揮しそうです。
RT-Linuxデバッグの一方法
マイクロPCとRTAI-Lab
PIC24FとFreeRTOS
Guest No.