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 で後追いできます。シリアルに流してもいいかも。