MINIXカーネル再構築:MINIX on VMware Player

MINIXでOSの勉強を進めていく際に、実際にカーネルのソースコードに手を加えて実験してみることは理解を深める上でとても良いことです。

ここではMINIXでカーネル再構築を行う手順を確認しておきます。

さてカーネルを再構築すると言っても、何らかの変更を加えないと、本当に再構築がうまくいったのか、再構築したカーネルで動作しているのかの確認が難しいので、簡単に以下の変更を入れておくことにします。変更内容は/usr/src/drivers/tty/tty.cファイルのmain()関数の無限ループの直前に"kernel rebuild test\n"という文字列を出力する行を追加するだけです。

/usr/src/drivers/tty/tty.c

/* Final one-time keyboard initialization. */
kb_init_once();

printf("\n");

printf("kernel rebuild test\n");

while (TRUE) {

ここでMINIXでdiffコマンドを使う時の注意点を書いておきます。

MINIXカーネル再構築01

今回の環境だけかもしれませんが、単純にdiffコマンドを実行すると「diff: memory exhausted」というエラーメッセージが表示されてdiffコマンドが実行できません。diffコマンドは

/usr/local/bin/diff
/usr/bin/diff

という二つのパスに存在しますが、デフォルトで起動される/usr/local/bin/diffをそのまま実行するとこのエラーが発生するようです。代わりに/usr/bin/diffを使うと正しくdiffが取れます。もし同様のエラーが発生した場合にはこの回避策を取ってみてください。

MINIXカーネル再構築02

さて実際にカーネルの再構築を行います。まず/usr/src/toolsディレクトリに移動してmakeコマンドを実行するとヘルプが表示されます。今回は、

make clean install

というパラメータを使って、全ファイルを再コンパイルし、ブートイメージを作成し、そしてハードディスクにインストールします。

MINIXカーネル再構築03

今回の環境では約2分でカーネル再構築が完了しました。完了すると上のように表示されます。新しいイメージは

/boot/image/3.1.2ar0

というファイル名でインストールされました。ちなみに現在起動中のイメージは

/boot/image/3.1.2a

というファイル名です。カーネル再構築をしたからといってイメージが上書きされてしまうわけではなく、ファイル名の最後に「r0」というリビジョン番号が付いた形でイメージが作成されるので、もしソース修正に失敗して起動できないイメージができてしまっても、常に起動可能な初期イメージで起動することができます。

MINIXカーネル再構築04

次にshutdownコマンドでブートモニターに移行します。ここでsetコマンドを実行すると最後の行に

newminix(3,Start Custom MINIX 3) {unset image;boot}

と表示されます。この行がカーネル再構築したイメージを指定する行になります。

MINIXカーネル再構築05

ブートモニターのコマンドラインで

newminix(3,Start Custom MINIX 3) {image=/boot/image/3.1.2ar0;boot}
image = /boot/image/3.1.2ar0
save

と入力すると、今回作成した新しいイメージ3.1.2ar0から起動できるようになります。ここで「off」コマンドで一度VMware Playerを終了させます。そして再度仮想マシンの設定ファイル(.vmx)をダブルクリックしてOSを起動します。

MINIXカーネル再構築06

OSが起動したら、

tail /var/log/messages

コマンドでログを確認すると、今回追加した「kernel rebuild test」というメッセージ(赤い線で囲んだ部分)が出力されていることが確認できます。これでたしかにカーネル再構築したイメージで起動していることが確認できました。

以上で、カーネル再構築の手順の説明は終了です。

MINIXメニュー

Copyright (C) 2008 MINIXが今VMware Playerでよみがえる! All Rights Reserved.