Plamo Linux では各種のドライバを組みこんだカーネルをインストールして、 たいていの環境ではそのまま使えるようになっています。しかし、そのために 不要なドライバ類も多数組みこまれ、カーネルはかなり大きなサイズになって います。Linux に多少なりとも慣れてくれば、一度はカーネルを自分の環境に 合わせて再構築して、カーネルすら自分の思い通りに設定できるPC-UNIX の真 髄を味わってみてください。
現在のLinuxでは、カーネルの再構築は必要な設定をしてmake
するだ
けの簡単な作業ですが、重要な設定を忘れていたり、lilo を実行し忘れたり
すると、システムが起動できなくなる可能性もあります。そのため、あらかじ
めいくつかの起動方法を用意しておきましょう。
zdisk とは、カーネルを直接フロッピーディスクに書き出 したものです。Linux のカーネルには先頭部分に自分自身を起動するためのコー ドが含まれているので、これをFDに書き出しておけば、そのFDでシステムを起 動することが可能です。
zdiskはカーネルの再構築時にmake zdisk
を実行すれば自動的に作成
できますが、既存のカーネルを使って手動で作成することもできます。そのた
めには、あらかじめフォーマットしたFDを用意して、
# cat /vmlinuz > /dev/fd0
を実行するだけです。zdisk は簡単な起動用ディスクですが、カーネルパラメー タを渡せないため、複数のイーサネットを認識できないとか、カーネルパラメー タでの指定の必要なデバイスを認識できないなどの問題があります。
Plamo Linux のインストールに使った起動ディスク はそのまま非常用の起動ディスクとして使うことが可能です。ただし、その場 合は、使っている / パーティションの位置をカーネルパラメータを使って渡 してやる必要があります。
例えば、一台目のIDE HDD の2つ目のパーティション(/dev/hda2
) が
Linux の / パーティションになっている場合、起動ディスクの lilo: のプロ
ンプトに対して、
lilo: bootdsk root=/dev/hda2 ro
と入力します。また、SCSI HDD の最初のパーティションが / パーティション の場合は、
lilo: bootdsk root=/dev/sda1 ro
と指定します。なお、私が配布している CD-R は bootable CD-ROM として作 成しているので、CD ブートの可能な機種の場合、特に起動ディスクを作成し なくても、CD-R から同様の指定で起動することが可能です。
PC に Windows95 もインストールされている場合は、
Windows95 の DOS モードから loadlin を使って起動することが可能です。
loadlin を使うとHDD からカーネルを起動できるので、FDD から起動するより
も高速でしょう。この方法を使う場合は、あらかじめカーネルと
loadlin.exe
を DOS/Windows 領域にコピーしておく必要があります。
以下では、カーネル(vmlinuz)とloadlin.exe
を DOS/Windows の
C:\\linux
ディレクトリにコピーしたものとして説明します。
loadlin.exe
を使って起動する場合、Windiws95 の DOS 窓ではなく、
実際の DOS モードから起動する必要があります。そのためには、Windows95
の起動時に F8 キーを押して起動メニューを出し、command prompt
only
モードで起動するか、Windows95 の終了メニューで「DOS モードで
再起動」を実行する必要があります。また、loadlin.exe
は
DOS の英語モードで実行しないと画面が表示されないため、us
コマ
ンドで英語モードに切り替えておく必要があります。
loadlin.exe
を使う場合も、カーネルに / パーティションの位置を
教えてやる必要があります。/dev/hda2
が / パーティションの場合、
c:\linux > loadlin vmlinuz root=/dev/hda2 ro
と指定します。/dev/sda1
が / パーティションの場合
c:\linux > loadlin vmlinuz root=/dev/sda1 ro
と指定します。
前節のような準備を整えた上で、カーネルの再構築に臨みましょう。カーネル
のソースコードは /usr/src/linux
にあります(このディレクトリは、
別のディレクトリへのシンボリックリンクになっている場合もあります)。カー
ネルの再構築は root 権限で行いますので、root になって
/usr/src/linux
へ移動し、make menuconfig
を実行しま
す。
make menuconfig
を実行すると、いくつか必要なファイルをコンパ
イルした後、メニュー形式の設定ウィンドウが開きます。
このメニューはncurses ライブラリを利用しているので、ncursers ライブラ
リをインストールしていない場合は、d1/ncurses.tgz
をインストー
ルする必要があります。Plamo Linux の「お勧め」メニューではあらかじめイ
ンストールしています。
Linux Kernel v2.0.33 Configuration +---------------------------------------- Main Menu -------------------------------------- | Arrow keys navigate the menu. <Enter> selects submenus --->. Highlighted letters are | hotkeys. Pressing <Y> includes, <N> excludes, <M> modularizes features. Press | <Esc><Esc> to exit, <?> for Help. Legend: [*] built-in [ ] excluded <M> module < > | module capable | +--------------------------------------------------------------------------------------- | | Code maturity level options ---> | | Loadable module support ---> | | General setup ---> | | Floppy, IDE, and other block devices ---> | | Networking options ---> | | SCSI support ---> | | Network device support ---> | | ISDN subsystem ---> | | CD-ROM drivers (not for SCSI or IDE/ATAPI drives) ---> | | Filesystems ---> | | Character devices ---> | | Sound ---> | | Kernel hacking ---> | | --- | | Load an Alternate Configuration File | | Save Configuration to an Alternate File | +--------------------------------------------------------------------------------------- +----------------------------------------------------------------------------------------- | <Select> < Exit > < Help > +-----------------------------------------------------------------------------------------
Plamo Linux で使っているカーネルの設定は
/usr/src/linux/Configs/[SCSI,IDE,PCMCIA]
に用意されていますの
で、初心者の方は Load an Alternate Configuration File
を選択し、
これらの設定ファイルを読みこんで、どのような設定がされているかを調べて
みてください。この設定ファイルから不要なドライバ類を削除していくのが簡
単でしょう。特にSCSI support
のSCSI low-level drivers
やNetwork device support
では、多数のドライバを組みこんでいる
ので、実際に使っているドライバだけを選択すれば、カーネルがかなりシェイ
プアップされるはずです。
それぞれの設定項目の意味については、
/usr/src/linux/Documentation/Configure.help
や、その翻訳版
/usr/doc/JF/Documentation/Configure.help.euc.gz
、
/usr/doc/JF/KERNEL-HOWTO.euc.gz
などを参照してください。これら
の文書はtknamazu 経由でも参照できます。
(もう少し時間ができた時にこのあたりは追加します。。)
必要な設定が終れば、メニューモードから EXIT して、実際のカーネルのコン
パイルに移ります。メニューモードで選択した設定は .config
とい
うファイルに保存されているので、必要ならばこのファイルを確認してみるの
もいいでしょう。
カーネルのコンパイル自身は簡単で、
# make dep; make clean; make zImage
を実行するだけです。このコマンドラインは 3 つのコマンドを実行していて、
最初のmake dep
で新しくした設定によるそれぞれのファイル間の依
存関係をチェックし、make clean
で古いファイルを削除し、
make zImage
で実際のコンパイルを実行します。
コンパイルにかかる時間はマシンによって数時間から数分まで差がありますの で、実際にどのようなコマンドが実行されるのかを眺めるなり、コーヒーを飲 むなり、食事をするなりして時間をつぶしてください。ちなみに、手元の K6-233M マシンでは、カーネルコンパイルに約 8 分くらいかかりました。
コンパイルの最後に、
System is 693 kB System is too big make[1]: *** [zImage] Error 1 make[1]: Leaving directory `/usr/src/linux-2.0.33/arch/i386/boot' make: *** [zImage] Error 2
のようなエラーが発生する場合、カーネルが大きすぎます。make
zImage
で作成されるカーネルは512kb 以下でなければなりませんので、
不要なドライバを外すかモジュールにしてカーネルのサイズを小さくするか、
make bzImage
で大きなカーネルを作ることを明示してください。
ただし、最近のメモリの大きなノートPCでは bzImage のカーネルで起動でき ない症状が報告されていますので、ノートPCで使う場合はカーネルをシェイプ アップするように心がけてください。
SCSI 用のドライバや NIC 用のドライバを組みこむ必要のないノートPCの場合、 bzImage になることはまずありませんが、、
コンパイルしたカーネルは/usr/src/linux/arch/i386/boot/zImage
に作成されます。
カーネルのコンパイルが終了すれば
# make modules
を実行して、モジュールデバイスをコンパイルします。モジュールデバイスは
# make modules_install
を実行すれば、適切なディレクトリ(/lib/modules/
カーネルバージョ
ンの数字) にインストールされます。ただし、# make
modules_install
コマンドは、古いモジュールを削除しないので、同じ
バージョンのカーネルを作り直した場合は新しいモジュールと古いモジュール
が同じ(/lib/modules/
カーネルバージョンの数字)ディレクトリに混
在してしまうので、あらかじめ # rm -rf /lib/modules/`uname -r`
を実行するなどして、古いモジュールを削除しておきましょう。
実際に使うモジュールは新しいもので上書きされるので実害はありませんが、
起動時の depmod -a
でモジュールの依存関係をチェックする際に古
いモジュールがエラーを出すことがあります。
コンパイルしたカーネルで正しく起動できるかどうかを事前にテストしておき ましょう。そのためにはあらかじめフォーマット済のFDを用意して、
# make zdisk
を実行します(512kb を超えるカーネルの場合、make bzdisk
を実行
します)。このコマンドを実行すればコンパイルしたカーネルをFDに書きだし
ますので、その FD から起動してみればコンパイルしたカーネルが実際に使え
るかどうかが分るでしょう。
コンパイルしたカーネルが実際に使えることを確認すれば、そのカーネルを HDD にインストールします。そのためのコマンドは
# make zlilo
です(512kb を超えるカーネルの場合make bzlilo
になります)。この
コマンドは、古いカーネルを/vmlinuz.old
にバックアップした上で
新しいカーネルを /vmlinuz
にインストールし、lilo
を実
行してMBRなどを更新します。
このコマンドを手動で実行したい場合は
# cp /vmlinuz /vmlinuz.old # cp /usr/src/linux/arch/i386/boot/zImage /vmlinuz # lilo
となります。
デフォルトの lilo の設定は /vmlinuz
を起動するようになっていま
すが、複数のカーネルを切り替えて使いたい場合は/etc/lilo.conf
に設定を追加する必要があります。/etc/lilo.conf
の設定について
は/usr/doc/JF/[LILO-FAQ.euc.gz|LILO-mini-HOWTO.euc.gz]
などが
役に立つでしょう。tknamazu を使ってlilo
をキーワードに検索して
みれば多数の関連文献が見つかります。