前のページ 次のページ 目次

15. カーネルの再構築

Plamo Linux では各種のドライバを組みこんだカーネルをインストールして、 たいていの環境ではそのまま使えるようになっています。しかし、そのために 不要なドライバ類も多数組みこまれ、カーネルはかなり大きなサイズになって います。Linux に多少なりとも慣れてくれば、一度はカーネルを自分の環境に 合わせて再構築して、カーネルすら自分の思い通りに設定できるPC-UNIX の真 髄を味わってみてください。

15.1 カーネル再構築の準備

現在のLinuxでは、カーネルの再構築は必要な設定をしてmakeするだ けの簡単な作業ですが、重要な設定を忘れていたり、lilo を実行し忘れたり すると、システムが起動できなくなる可能性もあります。そのため、あらかじ めいくつかの起動方法を用意しておきましょう。

zdisk

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 から同様の指定で起動することが可能です。

loadlin

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

と指定します。

15.2 カーネルの設定

前節のような準備を整えた上で、カーネルの再構築に臨みましょう。カーネル のソースコードは /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 supportSCSI low-level driversNetwork device support では、多数のドライバを組みこんでいる ので、実際に使っているドライバだけを選択すれば、カーネルがかなりシェイ プアップされるはずです。

それぞれの設定項目の意味については、 /usr/src/linux/Documentation/Configure.helpや、その翻訳版 /usr/doc/JF/Documentation/Configure.help.euc.gz/usr/doc/JF/KERNEL-HOWTO.euc.gzなどを参照してください。これら の文書はtknamazu 経由でも参照できます。

(もう少し時間ができた時にこのあたりは追加します。。)

15.3 カーネルコンパイル

必要な設定が終れば、メニューモードから 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でモジュールの依存関係をチェックする際に古 いモジュールがエラーを出すことがあります。

15.4 カーネルのインストール

コンパイルしたカーネルで正しく起動できるかどうかを事前にテストしておき ましょう。そのためにはあらかじめフォーマット済の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をキーワードに検索して みれば多数の関連文献が見つかります。


前のページ 次のページ 目次