沼津高専 電子制御工学科
MIRS0105 技術調査
RT-Linux
MIRS0105-TECH-0005
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2001.12.13 松浦、阿部 瀬川 初版

ソフトウェア調査報告


目次

  1. RT-Linuxとは
  2. RT-Linuxの操作
  3. RT-Linuxの構造
  4. MIRS0105でのRT-Linuxの使用方法
  5. ソフトウェア構成

  1. RT-Linuxとは

     Linuxにパッチとして組み込むプログラムであり、インターネットを通じて入手できるフリーソフトウェアである。 Linuxが動作してるコンピュータにインストールすることで簡単にリアルタイム処理を行えるオペレーティングシステムを 作ることができる。Linuxの機能拡張版なので、Linuxの持つソフトウェアをそのまま利用することができる。

     RT-LinuxはリアルタイムOSとしてリアルタイムスケジューラ、タスク優先度の管理といった機能を持つ。

  2. RT-Linuxの操作

    RT-Linuxを立ち上げた後、以下のコマンドが使用できる。このコマンドはスーパーユーザでのみ有効である。

    1. insmod … モジュールの組み込み
    2. rmmod … モジュールの削除
    3. lsmod … 現在組み込まれているモジュールの確認
    モジュール…Linuxのカーネル(核)に機能を追加するためのプログラム。なお、モジュールはC言語等で記述する。

  3. RT-Linuxの構造

    1. RT-Linux基本用語

      1. POSIX…UNIXシステムのインターフェース。RT-Linux v2.3では全てのAPI関数がPOSIXスタイルで 構成されているのではなく、POSIX+非POSIX(RT-Linux独自)のスタイルでプログラミングを行う。
      2. API関数…RT-Linuxで用意されている関数
      3. API…Applocation Programing Interfaceの略。OSとOS上で稼働するインターフェイス規定
      4. スレッド…複数のCPUを持つコンピュータシステム上で、共有メモリを使用して 並列計算を行うOS機能。スレッドプログラミングを行うことで、1つのプログラム(プロセス) の中で、複数のスレッドがアドレス空間を共有して、情報の交換を高速で効率的に行うことができる。
      5. FIFO…リアルタイムタスクとLinuxプロセス間の情報交換機能。(First In First Out)

    2. リアルタイムカーネルモジュール

      Linuxでリアルタイム処理を実現するために、RT-Linux V2.3では、次のカーネルモジュールが供給されている。
      カーネルモジュール
      カーネル内容
      rtl_schedPOSIXインターフェースとRT-Linux V1.xで供給されている APIの双方をサポートする優先順位スケジューラ。
      rtl_timeプロセッサのクロックを制御し、ハンドラのクロックに接続するインターフェースを 提供する。
      rtl_posixioデバイスドライバに対して、POSIXスタイルのopen/read/writeインターフェースを サポートする。
      rtl_fifoリアルタイムタスクとLinuxプロセス間の、データのread/writeインターフェースを提供する。

       RT-Linux V2.x用に開発されたリアルタイムプログラムを実行するためにには、あらかじめこれらのカーネルモジュールをカーネルに組み込んでおく必要がある。
       カーネルモジュールの組み込み方法は、シェルスクリプトを使う。(ひとつひとつ組み込むこともできる)

      1. # cd /usr/src/rtlinux-2.3 (システム環境によって異なる)
      2. # sh insrtl (insrtlにはinsmod 〜.o というコマンドが記述されているだけである。)

      カーネルモジュールの削除方法

      1. # cd /usr/src/rtlinux-2.3 (システム環境によって異なる)
      2. # sh rmrtl (rmrtlにはrmmod 〜(モジュール名) というコマンドが記述されているだけである。)

  4. MIRS0105でのRT-Linuxの使用方法

     MIRS0105では、超音波センサ、PWM、ロータリーエンコーダの制御を行うのでRTタスクモジュールを使う。これらの制御はリアルタイムに計測しなくてはならないから、カーネル空間のRT-Linuxを使う必要がある。LinuxよりもRT-Linuxの方がスケジューリングを行う優先度が高いため常に行われる割り込み処理、リアルタイム性に優れているからである。
     リアルタイム処理をそれほど求められていない、赤外線センサ、タッチセンサ、LCDについては、Linuxカーネルのドライバを使用する。
     これらの制御を行うために、FlashDiskにRT-Linux、Linuxカーネルをインストールし、ユーザプログラムを組み込んで使用する。また、ユーザープログラム間との情報交換はFIFOを生成してそれを用いて行われる。


    制御構造の図
     
  5. ソフトウェア構成
    • FIFOの役割
      FIFO番号
      役割
      FIFO1
      超音波センサ番号選択用
      FIFO2
      超音波による測定距離データ、エラー値格納用
      FIFO3
      ロータリーエンコーダのカウント値書込用
      FIFO4
      PWMの速度データ受取用
      FIFO5
      RE,PWMへのSTART、STOP等の各種指令やタスクの優先度、実行周期の受取用
       
    • 各タスク・ドライバの機能
      • 超音波センサ(RT-task1)
         行動制御プログラムからコマンド(センサ選択番号)がFIFO1に書き込まれてから超音波が送信される。
         超音波センサを選択した時の時刻と、割込みがはいった時の時刻のデータから距離に換算し、FIFO2に書き込む。
         ただし、一秒たっても割り込みが入らない場合はタスク1(タイムアウトタスク)が起動し、エラー値をFIFO2に書き込んでタイムアウトとする。

      • 赤外線センサ(driver1)
         赤外線センサタスクの機能は、割り込みが発生したとき、他の割り込みをマスクし、データの保存を行いその割り込み信号をリセットした後、通常動作に戻ることである。

      • タッチセンサ(driver2)
         タッチセンサタスクの機能は、タッチセンサが反応する度にこのタスクが起動し、タッチセンサの状態を保存することである。

      • ロータリーエンコーダ・PWM(RT-task2)
         ロータリーエンコーダタスクの機能は、一定時間ごとにロータリーエンコーダの値をFIFO3に読み込んで、そこからマシンの速度を計算しCPUにデータを送ることである。
         PWMタスクの機能は、CPUから受け取ったduty比のデータをPWM信号に変換してモーターへ送ることである。

      • LCD(driver3)
         LCDドライバは、各センサ・ロータリーエンコーダ・PWMの情報やシステムの状態を表示することを目的とする。