RT-Linux 3.2 pre3 のインストール

関連情報: OpenTech - RTLinux Support in Europe 日本のサイトはないようです.

以下は,RT-Linux 3.2 pre 3 のインストール方法,というより,インストールログです.
インストール対象:
機種SONY VAIO PCG-TR3/S
CPUPentium M 1GHz
メモリ512MB
OSFedora Core 1.0/kernel 2.4.22
gcc3.3.2 20031022 (Red Hat Linux 3.3.2-1)


必要なもの: Fedora 1 の現時点のカーネルが 2.4.22 なので,ここでは同じバージョンのカーネルソースを使います.
他のバージョンのカーネルに対しても,rtlinux-3.2pre3 のパッチが上記 URL で公開されています.

上記 2 つを /usr/src におきます.
まず,rtlinux のアーカイブを展開します:
# cd /usr/src
# bunzip2 -c rtlinux-3.2-pre3.tar.bz2 | tar xvf -
# cd rtlinux-3.2-pre3
    
基本的なインストール方法は doc/INSTALLATION に書いてある通りです.
linux カーネルソースを展開します:
# cd /usr/src
# bunzip2 -c linux-2.4.22.tar.bz2 | tar xvf -
    
linux -> linux-2.4.22 のシンボリックリンクを作成します.
古いリンクを消す必要があるかもしれません.
# ls -l linux
lrwxrwxrwx  1 root root 24  5 21 15:19 linux -> linux-2.4.22-1.2188.nptl
# rm linux
# ln -s linux-2.4.22 linux
    
カーネルソースに,RTLinux のパッチを当てます:
# cd linux
# patch -p1 < ../rtlinux-3.2-pre3/patches/kernel_patch-2.4.22-rtl3.2-pre3 
patching file Makefile
patching file arch/i386/config.in
patching file arch/i386/kernel/Makefile
(略)
patching file kernel/exit.c
patching file kernel/fork.c
patching file mm/vmalloc.c
The next patch would delete the file net/ipv4/netfilter/ipt_MASQUERADE.c~,
which does not exist!  Assume -R? [n]
Apply anyway? [n] 
Skipping patch.
1 out of 1 hunk ignored
    
最後のは無視して問題ありません.(余分なファイルの消し忘れ?)
次に,カーネルパラメータを設定します:
# make menuconfig (←この時点で,gcc がない,curses.h がない,等,エラーが出る場合は,適宜 rpm パッケージをインストールする必要があります.当方は,yum install gcc ncurses-devel する必要がありました.)
(何も編集せずにセーブして終了) # cp .config ../.config-rtl3.2-pre3-org # make menuconfig (必要に応じて,適宜パラメータの設定を変更します) # cp .config ../.config-rtl3.2-pre3-edited
参考までに,編集前後の .config ファイルはつぎの通りです:
編集前:.config-rtl3.2-pre3-org
編集後:.config-rtl3.2-pre3-edited

ここでは,initrd は使用していません.rtlinux で initrd を使用できるかどうかは,わかりません.(使ってはいけない,とも書いていない)
APM は外した方が良いでしょう(INSTALLATION に記載あります).
また,こちらでは最初,Ext3 journalling file system support をモジュールに,Ext2 を off にしていましたが,kernel panic になりはまりました.

次に,カーネルとモジュールをコンパイル,インストールします:
# make dep
# make bzImage
# make modules
# make modules_install
# cp arch/i386/boot/bzImage /boot/vmlinuz-2.4.22-rtl3.2-pre3 
    
grub.conf に以下を追加します:
title Fedora Core (2.4.22-rtl3.2-pre3) 
        root (hd0,4) 
        kernel /vmlinuz-2.4.22-rtl3.2-pre3 ro root=/dev/hda6 hdc=ide-scsi rhgb apm=off acpi=on 
    
ただし,root= には,linux のルート(/)パーティションを指定してください.
grub.conf の例

リブートして rtlinux カーネルで起動します.
その後引続き,rtlinux モジュールのコンパイル等を行います:
# cd /usr/src/rtlinux-3.2-pre3
# make menuconfig
(こちらでは,何も変更せず,セーブして終了しました.
この後,doc/INSTALLATION には,rtl.config ファイルの CC= を確認しろ,と指示がありますが,
こちらでは rtl.config ファイルがなかったのでスキップしました.) # make dep # make # make install
テストします:
# make regression
(略)
Testing multiple loads of rtl.o...                      [   OK   ]
Testing multiple loads of rtl_time.o...                 [   OK   ]
Testing multiple loads of rtl_sched.o...                [   OK   ]
Testing multiple loads of rtl_posixio.o...              [   OK   ]
Testing multiple loads of rtl_fifo.o...                 [   OK   ]
Testing RTLinux fifos...                                [ FAILED ]
Testing thread wait times...                            [ FAILED ]
Testing that Linux time progresses...                   [   OK   ]
Testing that Linux time is monotonically increasing...  [   OK   ]
Testing ping flood..
    
全て OK となるのが正常だそうですが,上記のようになってしまいました. rtl_time.o のテストは,ほとんどハングアップ状態でした.
これはパスしましたが,ping flood の後,完全に止まってしまいました.
ただし,ハングアップではありません.ctrl-c でストップしました.
fifo のテストが failed になっていますが,/dev を調べると /dev/rtf?? がありません.Makefile を見ると,/dev/rtf?? は make install 時に作られことになっています.
おかしいなと思いつつ,再度
# make install
    
何故か今度は /dev/rtf?? ができました. 再度テスト:
# make regression
(略)
Testing multiple loads of rtl.o...                      [   OK   ]
Testing multiple loads of rtl_time.o...                 [   OK   ]
Testing multiple loads of rtl_sched.o...                [   OK   ]
Testing multiple loads of rtl_posixio.o...              [   OK   ]
Testing multiple loads of rtl_fifo.o...                 [   OK   ]
Testing RTLinux fifos...                                [   OK   ]
(今度は OK になりました....)
Testing thread wait times...                            [   OK   ]
Testing that Linux time progresses...                   [   OK   ]
Testing that Linux time is monotonically increasing...  [   OK   ]
Testing ping flood...                                   [   OK   ]
(先程と同様,ここで止まりましたが,ctrl-c を押して先に進めました.)
Testing floating-point support...                       [   OK   ]
Removing rtl_sched.o...                                 [   OK   ]
Testing periodic timer...                               [   OK   ]
Testing oneshot timer...                                [   OK   ]
    
というわけで,良くわかりませんが一応全て OK となりました. ping flood のテスト時,
ping -f -c 100000 localhost 2>> ${OUTFILE} > /dev/null
    
に時間がかかっているようです.OUTFILE は regression.log です.
よくわからないので先に進みます.

rtlinux モジュールをロードします:
# rtlinux start
Warning: loading /usr/rtlinux-3.2/modules/mbuff.o will taint the kernel: no license
  See http://www.tux.org/lkml/#export-tainted for information about tainted modules
Module mbuff loaded, with warnings
Module rtl loaded, with warnings
Module rtl_time loaded, with warnings
Module rtl_posixio loaded, with warnings
Module rtl_fifo loaded, with warnings
Module rtl_sched loaded, with warnings

Scheme: (-) not loaded, (+) loaded
  (+) mbuff 
  (+) rtl 
  (+) rtl_fifo 
  (+) rtl_posixio 
  (+) rtl_sched 
  (+) rtl_time 
    
全て (+) で正常です.
status を確認します:
# rtlinux status

Scheme: (-) not loaded, (+) loaded
  (+) mbuff 
  (+) rtl 
  (+) rtl_fifo 
  (+) rtl_posixio 
  (+) rtl_sched 
  (+) rtl_time 
    
通常は,ここで実験用モジュールを組み込んで,制御実験等を行います.

rtlinux モジュールを外します:
# rtlinux stop
rmmod: rtl is in use

Scheme: (-) not loaded, (+) loaded
  (-) mbuff 
  (-) rtl 
  (-) rtl_fifo 
  (-) rtl_posixio 
  (-) rtl_sched 
  (-) rtl_time 
    

Yasuhide Kobayashi
Last modified: Sun Feb 11 13:22:47 JST 2007