RTLinuxの構築

リアルタイムリナックスを試してみる。


・最初に注意!!!

RedhatLinux7.2はext3fsが使われています。/etc/fstabを設定しなおしてext2fsに変更後、再起動してファイルシステムを変えておく。(一応ディスク上の情報はe2fsとe3fsは同じらしい)

もしくはインストール時にe2fsに変えておく、これが一番いい。

パーティションのきり方次第ではこれをやらないと泣くかも。そもそもkernel2.4.4はext3fsに対応してない!。

・まずはダウンロード

ftp.fsmlabs.comなどから。カーネルもどっかからダウンロード。現在(2002/02/09)、RTLinuxはV3.1でした。これはkernel-2.4.4にあたるものです。

一言:このバージョンのカーネルは有名どころのbt848とかがVideoForLinuxに対応してません。でもこれじゃなかったら2.2系になっちゃうんだよね。こまった、こまった。

・ソースを展開

Installation.txtのとおり、/usr/src/rtlinux以下にインストール。

mkdir /usr/src/rtlinux
cd /usr/src/rtlinux
tar xvzf linux-2.4.4.tar.gz
tar xvzf rtlinux-3.1.tar.gz
cd linux
patch -p1 < ../rtlinux-3.1/kernel_patch-2.4.4

ここで、Redhat Linuxのgccはだめなので(実際にコンパイルできん)Makefileの

CC = $(CROSS_COMPILE)gcc

CC = kgcc

に変更。

カーネルのバージョン(名前)はMakefileの頭にある

VERSION = 2
PATCHLEVEL = 4
SUBLEVEL = 4
EXTRAVERSION = -rtl

なので 2.4.4-rtl とわかる。

・カーネルのコンフィグとmake

もしコンフィグがガタガタになっているならmake mrproper
以前のコンフィグは/usr/src/rtlinux/linux/.configにある。(もしあるなら)

make xconfig
make dep
make clean
make bzImage

ここでarch/i386/bootにbzImageができるので、/boot/vmlinuz-2.4.4-rtl としてコピー。

cd /usr/src/rtlinux/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.4.4-rtl

・モジュールの構築

make modules
make modules_install

で/lib/modules/2.4.4-rtl以降にモジュールができる。もし、同じ名前のディレクトリがあるときは消去しておく。

・モジュールローダの作成(SCSIをモジュールで使用する時は必要、それ以外のときはしないほうがいい)

まず、/etc/modules.confの中にSCSI関連があるかチェック、あれば

/sbin/mkinitrd -f /boot/initrd-2.4.4-rtl.img 2.4.4-rtl

でモジュールイメージファイルを作成。grubにも登録。

・grubローダの設定

/boot/grub/grub.confを設定する。再起動後、確認。

・rtlinux properな構築

無事に新しいカーネルで立ち上がったらリアルタイムリナックスそのものをコンパイル。ここでのconfigではrtl_printfをprintkを使わないようにとりあえずしときます。(動作チェックのため)

cd /usr/src/rtlinux/rtlinux-3.1
ln -s /usr/src/rtlinux/linux linux
make xconfig
make
make devices

・動くかなテスト

(rtl_printfはXやkon上ではだめ、vga=5は大丈夫)

/sbinにパスを通し、とりあえずscripts/insrtlでモジュールを立ち上げといて、example/hello/hello.oでも実行してみる。

insmod hello.o

I'm here; my arg is 0
I'm here; my arg is 0
I'm here; my arg is 0

と0.5秒おきに表示されます。rmmod helloでとめる。モジュールを見るのはlsmodコマンド。他の例題もためしてみたり。

Xとかの環境でも使うときはrtl_printfをprintkにしてもう一度構築。printkの時はdmesgやsyslogに出力されます。/etc/syslog.confに kern.warn を拾うように設定して less で後追いできます。シリアルに流してもいいかも。