沼津高専 電子制御工学科
ソフトウェア調査報告書
MIRS0101-TECH-0014
改訂記録
版数 作成日 作成者 承認 改訂内容
A01 2001.12.16 伊藤・八木 勝又 初版

目次

  1. ソフトウェアの動作環境
  2. RT-Linuxとは
  3. RT-Linuxの処理の流れ
  4. RT-Linuxの構造
  5. ソフトウェア構成  
  6. MIRSでのRT-Linuxの使用理由

  1. ソフトウェアの動作環境

    ハードウェア

    CPU ボード i486 133MHz, Memory 16MB, SVGA chip, 10M Ethernet, ISA bus
    記憶装置 Flush memory 64MB (IDE ディスク互換)
    FPGA ボード 標準ゲート数 10,000, RAMビット数:6,144, ユーザI/O数:134, ISA bus

    オペレーティングシステム

    RT-Linux Ver 2.3 (Linux kernel 2.2.14)

    ここでは、オペレーティングシステムのRT-Linuxについての調査を報告する。
    ソフトウェアは当然ハードウェアの制限に準じたものを作る。

  2. RT-Linuxとは

     RT-Linuxは、Linuxの機能にリアルタイム処理をする機能を付け加えたものである。  RT-カーネルは、RT-タスクとLinuxカーネルを対象にしたスケジューリングを行う。Linuxカーネル本体は最も低い優先度でスケジューリングされるもので、RT-タスクの優先度のほうがLinuxカーネルよりも高い。  MIRSでは、通常の状態では最も優先度の低いユーザプログラム(行動制御プログラム)を実行し、その中で決められた周期でRT-タスクを実行していく。これがリアルタイム処理である。  RT-タスク・ユーザプログラム間の情報交換は、FIFO(First In First Out)を生成してそれを用いて行われる。


    図1 全体の構成図

  3. RT-Linuxの処理の流れ


    RT-Linuxの処理は以下のような流れに基づいて行われる。
    赤で囲まれた部分がRTLinuxによって拡張される部分
    緑で囲まれた部分がユーザーが作成する(提供される)部分



    図2 処理の流れ

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


  5. ソフトウェア構成

       全体の構成図は図1の通り。
       ソフトウェアは下記のタスク・ドライバから構成される。  
      • 超音波センサ(RT-task1)
      • 赤外線センサ(driver1)
      • タッチセンサ(driver2)
      • 白線ンサ(driver3)
      • ロータリーエンコーダ・PWM(RT-task2)
      • LCD(driver4)

       これらのタスク・ドライバと行動制御プログラムとのデータ、コマンドのやりとりはFIFOによって行われる。このFIFO一つに対し一つの役割を持たせ必要な数だけ用意する。具体的に下記の表に示す。

      FIFOの役割

      FIFO番号
      役割
      FIFO1
      超音波センサ番号選択用
      FIFO2
      超音波による測定距離データ、エラー値格納用
      FIFO3
      ロータリーエンコーダのカウント値書込用
      FIFO4
      PWMへの速度データの受取用
      FIFO5
      RE,PWMへのSTART、STOP等の各種指令やタスクの優先度、実行周期の受取用

      各タスク・ドライバの機能

      • 超音波センサ(RT-task1)
           行動制御プログラムからコマンド(センサ選択番号)がFIFO1に書き込まれてから超音波が送信される。
           超音波センサを選択した時の時刻と、割込みがはいった時の時刻のデータから距離に換算し、FIFO2に書き込む。
           ただし、一秒たっても割り込みが入らない場合はタスク1(タイムアウトタスク)が起動し、エラー値をFIFO2に書き込んでタイムアウトとする。

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

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

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

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

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


  6. MIRSでRT-Linuxの使用理由

     MIRSでは超音波センサ、PWM、ロータリーエンコーダを制御するためにRTタスクモジュールを使っている。これらの制御は、必ず何秒ごとに計測をするという、リアルタイム性が求められている。(カウンタ制御など)  だからCPUのスケジュールがいつ回ってくるかわからないLinux上ではなく、リアルタイムに割り込みが可能なRT-Linuxが必要である。