Linuxは初めてという人は、「なぜ独自のカーネルを構築する必要があるのだろうか」という疑問をよく抱きます。現在ではカーネルモジュールが改善されているので、この疑問に対する最も正確な答えは次のようになるでしょう。「今、独自のカーネルを構築する必要性を感じていなければ、構築しなくてもよい。」
以前は、システムに新しいハードウェアを追加した場合にはカーネルを再コンパイルする必要がありました。つまり、カーネルは静的なものでした。しかし、Linux 2.0.xではカーネルが改良され、ハードウェアドライバの多くをコンポーネントとしてモジュール化でき、要求があった場合にのみ組み込めるようになりました。しかしそれでも、システムについての設定オプションを変えてコンパイルされたカーネルが複数ある場合には問題がありました(たとえばSMPカーネルとUPカーネル)。ところが、Linux 2.4.xのカーネルモジュール化方式がさらに改良され、複数モジュールの共存が簡単になりました(ただしモジュールを共有することはできません)。
カーネルモジュールの取り扱いについては、第24章を参照してください。このようにカーネルモジュールの処理方法は変遷してきましたが、これに気づくことはほとんどないでしょう。気づくのは、システムに合わせてカーネルをカスタマイズし再コンパイルするときぐらいです。
ここでは、モジュール形式カーネルの構築について解説します。モノリシックカーネルについては、モノリシックカーネルの構築項を参照してください。モノリシックカーネルの構築とインストールについて、モジュール形式カーネルとは異なる点について説明してあります。
以下では、x86アーキテクチャ用のカスタムカーネルを構築する手順を説明します。
![]() | メモ |
|---|---|
ここの例では、カーネルバージョンとして2.4.18-0.12を使っています。使用カーネルバージョンは異なる場合があります。カーネルバージョンを確認するには、uname -rコマンドを入力します。2.4.18-0.12を実際のバージョンに読み替えてください。 |
最も重要な手順は、以降の作業でミスをした場合に備えて、正常に動作する緊急ブートディスクを用意しておくことです。インストール時にブートディスクを作成しなかった場合は、mkbootdiskコマンドを使って、今すぐ作成してください。実際のコマンドは、通常、mkbootdisk --device /dev/fd0 2.4.xのようになります。ここで、2.4.xは、カーネルの完全なバージョン番号(2.4.18-0.12など)です。ブートディスクができたら、それを使ってシステムがブートできることを確認してください。
まず、kernel-headersパッケージとkernel-sourceパッケージをインストールしておく必要があります。すでにインストールされている場合は、rpm -q kernel-headersコマンドとrpm -q kernel-sourceコマンドを実行してバージョンを確認してください。まだ、インストールしていない場合は、Red Hat Linux CD-ROM 1か、ftp://ftp.redhat.comにあるRed Hat FTPサイト(ミラーサイトの一覧は、http://www.redhat.com/mirrors.htmlにあります)からインストールしてください。RPMパッケージのインストールについては、第25章を参照してください。
シェルプロンプトを開き、/usr/src/linux-2.4ディレクトリに移動します。これ以降のコマンドは、すべてこのディレクトリで実行しなければなりません。
カーネルを構築するときは、ソースツリーをきれいな状態にしておくことが重要です。したがって、最初に、make mrproperコマンドで作業を始めるのがよいでしょう。このコマンドは、前回の構築作業がソースツリーに残した設定ファイルなどを削除します。すでに動作が確認されている設定ファイル(/usr/src/linux-2.4/.config)があり、それを使う予定の場合は、このコマンドを実行する前に別のディレクトリに待避させ、実行後にコピーして戻してください。または、この次の手順は飛ばしてください。
次に、カーネルに組み込むコンポーネントを指定する設定ファイルを作ります。
X Window Systemが使える環境なら、make xconfigコマンドを使うとよいでしょう。コンポーネントがボタンの形式で表示され、これをマウスで選んでいきます。選択肢は、Y(はい)とN(いいえ)とM(モジュール)の3つです。コンポーネントを選び終えたら、Save and Exitボタンをクリックします。これで、設定ファイル/usr/src/linux-2.4/.configが作られ、Linux Kernel Configurationプログラムは終了します。
デフォルトRed Hat Linuxカーネルの設定を使用する場合は、/usr/src/linux-2.4/configsディレクトリから/usr/src/linux-2.4/.configに設定ファイルをコピーします。次に、make xconfigコマンドを実行し、必要な変更だけを行います。必ず、変更内容を設定ファイルに保存してください。
カーネルを設定する方法は、ほかにもあります。
make config —対話式のテキストプログラムです。コンポーネントが順次表示され、1つずつ選択の有無を指示していきます。この方法はX Window Systemを使いませんが、指示を遡って変更することはできません。
make menuconfig —テキストモードですがメニュー方式のプログラムです。コンポーネントは分類表示され、テキストモードのRed Hat Linuxインストールプログラムと同じ方法でコンポーネントを選びます。コンポーネントに対応するタグの印を切り替えて選択します。記号の意味は次のとおりです。*(組み込む)、 [ ](組み込まない)、<M>(モジュール)、< >(モジュール化可能)。この方法も、X Window Systemを使いません。
make oldconfig —これは非対話式のスクリプトで、設定ファイルにデフォルトを設定します。デフォルトのRed Hat Linuxカーネルを使っている場合は、コンピュータアーキテクチャ向けに出荷されているカーネルと同じになるように設定されます。いったん間違いのないデフォルトに設定し、そのあとで不要な機能を無効にするといった使い方ができます。
![]() | メモ |
|---|---|
kmod(詳しくは、第24章を参照)とカーネルモジュールを使うときは、設定の際、kmod supportとmodule version (CONFIG_MODVERSIONS) supportに対してYesと入力しなければなりません。 |
/usr/src/linux-2.4/.configファイルができたら、次にmake depコマンドを実行して、依存性を正しく設定します。
make cleanコマンドを実行し、構築用にソースツリーの準備をします。
/usr/src/linux-2.4/Makefileを編集して、既存のカーネルが上書きされないようにします。ここで説明する方法を利用すると、トラブルの際、非常に簡単に回復させることができます。それ以外の用途について、詳しくはhttp://www.redhat.com/mirrors/LDP/HOWTO/Kernel-HOWTO.htmlか、Linuxシステム上の/usr/src/linux-2.4にあるMakefileを参照してください。
/usr/src/linux-2.4/Makefile中のEXTRAVERSION =で始まる行を編集し、その文字列の終わりに日付を加えて、名前が一意になるようにします。たとえば、バージョン2.4.18-0.12のカーネルをコンパイルしているのであれば、次のようにします。EXTRAVERSION = -0.1.21-jul2001。こうすれば、運用中のカーネルとバージョン2.4.18-0.12-12jul2001のカーネルという新旧2つのカーネルをシステムに同時に置くことができます。
make bzImageを実行して、カーネルを構築します。
make modulesを実行して、設定したモジュールをすべて構築します。
make modules_installコマンドを実行して、カーネルモジュールをインストールします(構築していない場合も)。コマンドの途中にある下線(_)を忘れないようにしてください。これで、カーネルモジュールは、ディレクトリパス/lib/modules/KERNELVERSION/kernel/drivers 以下にインストールされます。ここで、KERNELVERSIONは、Makefileで指定したパス名です。上記の例でいえば、/lib/modules/2.4.18-0.12-jul2001/kernel/drivers/となります。
SCSIアダプタがありSCSIドライバをモジュール化した場合は、新たにinitrdイメージを構築します。また、ext3サポートを使用してカーネルをモジュールとして構築する(Red Hat Linuxのデフォルト)場合、initrdイメージを作成する必要があります。詳細についてはinitrdイメージの作成項を参照してください。
make installを実行して、新しいカーネルとそれに付随するファイルを適切なディレクトリにコピーします。
カーネルが構築され、インストールされます。次に、ブートローダーを設定して、新しいカーネルを起動します。詳細についてはブートローダーの設定項を参照してください。