カーネル2.6のコンフィグレーション

ここではカーネル2.6のデバイスドライバに関連するトピックスを中心に取り上げて来たが、実際にすでにリリースされているカーネル2.6.0のテスト版のインストールやコンフィグレーションは実際にどのように行うだろうか。今回は参考情報として、Redhatのディストリビューションにlinux-2.6.0テスト版をインストールするためのヒントを紹介する。

カーネル関連の開発に携わっている開発者たちの間では、DebianやSlackwareベースのディストリビューションを使う事が多いようだが、Redhat系のパッケージに開発用カーネルをインストールして評価する事も可能である。ここではRedhat8 / 9の環境に、開発用カーネルを評価目的のために、インストールするためのヒントと関連する情報を紹介する。

本稿の趣旨としては、Redhatへのインストール手順を紹介しながら、2.5/2.6系カーネルでのカーネル・コンフィグレーションやデバイスドライバの変更点を示す事であって、「使用に耐えうる2.6系カーネル・システムのインストール方法」ではない事にご注意願いたい。この手順に従ってインストールしたシステムは不完全なものであり、利用に関しては各自の責任でお願いするほか、インストール手順に関しても、初心者向けのHOWTOのように全てを網羅したものでは無い。

準備1:ファイルの用意

以下のファイルを用意する

準備2:modutilsのインストール

まず、Rustyの新しいmodutilsをインストールする。これは、カーネル2.5以降ではローダブル・モジュールのファイル・フォーマットが新しくなり、古いmodutilsが利用できないためである。下位互換性は無いので、'insmod -f' などとしても受け付けて貰えないだけでなく、異なったフォーマットのモジュールはmodutils自体に認識されないので、カーネル・バージョンによって使い分ける必要がある。カーネル2.5以降の新しいローダブル・モジュールのファイル・フォーマットは、拡張子を .koとして区別する事になっている。

さらに説明を加えれば、この新しいフォーマットのローダブル・モジュールをコンパイル・リンクする手順も、カーネル2.4までとは異なっている。以前の記事で、カーネル2.5以降でもデバイスドライバの互換性が保たれていると書いたが、それはあくまでもソースコード・レベルの話である。この新しいローダブル・モジュールのフォーマットに関する話題は、別の機会に取り上げたい。

Rustyの新しいmodutilsでは、古い.oフォーマットに対する操作コマンドを受け取った時に、古いmodutilsが*.oldの名前であれば、それにコマンドを引き渡すという、バージョンの違いを考慮した工夫がしてある。そのため、2.4系カーネルとmodutilsコマンドの併用を考慮するならば、例えば以下のようにして、必ず古いコマンドが、???.oldで参照できるようにバックアップして残しておくべきだろう。

(古いmodutilsをバックアップする操作の例)
# cd /sbin
# cp -p insmod insmod.old
# ln -s insmod.old lsmod.old
# ln -s insmod.old rmmod.old
# ln -s insmod.old modprobe.old
# cp -p depmod depmod.old

注:実際はこのような手作業をしなくとも、make moveoldを一度だけ実行する事でバックアップが行われる事になっている。(2003年11月17日更新)

準備3:fstabの設定

/etc/fstabを編集して、ディスク・パーティションのマウント・リストが論理ラベル名になっているのを、物理デバイス名に変更する。筆者が試した環境では、Redhatインストール直後のように、マウントするパーティションが論理ラベル名になっていると、2.5/2.6系カーネルではブートのpivot_root の辺りで認識できない様子だった。論理ラベル名のパーティションは、ディスクの接続先のコントローラを変更しても、fstabを修正する必要が無いので便利であるが、ブートできなくては仕方がないので、変更しておく。論理ラベル名のまま2.5/2.6をブートさせる方法もあると思うが、カーネル評価の目的には問題がないので、ここではfstabを修正する事にする。以下に編集例を示す。

(元のfstabの例)
LABEL=/                 /                       ext3    defaults        1 1
none                    /dev/pts                devpts  gid=5,mode=620  0 0
LABEL=/home             /home                   ext3    defaults        1 2
none                    /proc                   proc    defaults        0 0
none                    /dev/shm                tmpfs   defaults        0 0
LABEL=/usr              /usr                    ext3    defaults        1 2
LABEL=/var              /var                    ext3    defaults        1 2
/dev/hda7               swap                    swap    defaults        0 0
/dev/cdrom              /mnt/cdrom              iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0                /mnt/floppy             auto    noauto,owner,kudzu 0 0
(修正後のfstabの例)
/dev/hda2               /                       ext3    defaults        1 1
none                    /dev/pts                devpts  gid=5,mode=620  0 0
/dev/hda6               /home                   ext3    defaults        1 2
none                    /proc                   proc    defaults        0 0
none                    /dev/shm                tmpfs   defaults        0 0
/dev/hda3               /usr                    ext3    defaults        1 2
/dev/hda5               /var                    ext3    defaults        1 2
/dev/hda7               swap                    swap    defaults        0 0
/dev/cdrom              /mnt/cdrom              iso9660 noauto,owner,kudzu,ro 0 0
/dev/fd0                /mnt/floppy             auto    noauto,owner,kudzu 0 0

準備4:不要なサービスの停止

新しくコンフィグレーションしたカーネルは一発で動作するとは限らない。Redhat8/9では、デバイスドライバの多くがローダブル・モジュールになっているが、カーネル2.5/2.6とRedhat等の2.4系用のrc.sysinit等のrcファイルの組み合わせでは、ブート時にロードできないローダブル・モジュールがあるので、次の2点に注意してシステムを設定しておいた方がいいだろう。

  • 不要なデーモン・サービスは止める
  • USBやLANが無くてもシステムが動作するようにしておく

カーネル・コンパイル

ここまでの準備ができたらば、カーネル・コンパイルを行う。カーネル2.5以降では、'make xconfig'はKDE/Qt環境専用となり、Gnome環境では動作しなくなったので、変わりにGnomeでは'make gconfig'を使用する。勿論、従来からの'make menuconfig'も使用可能である。そのほかには、'make dep' の手順が無くなったという変更点がある。また、make実行中のコマンド・パラメータは、標準では画面にエコーバックされなくなった。

必要最低限度のカーネル・コンフィグレーションは、従来通りdefconfigを使用して行う事ができる。デバイスドライバをモジュール化させて組み込む事も可能だが、前述の通り、そのままではブート時に組み込みできないローダブル・モジュールがあるので注意が必要だ。特に、ローダブル・モジュールのファイルシステムはブート時には組み込まれず、USB関連も構成モジュールの名前が2.4系から変更になっているために組み込まれない。defconfigのデフォルト設定では、RAMDISK/initrdが無効になっているが、設定すれば2.4系のmkinitrdで作成したinitrdイメージが使用できる。

一旦2.6系カーネルで立ち上がった後は、.configを変更して、新しい機能やローダブル・モジュールも試してみる事が可能であろう。ただしテスト版カーネルであるので、動作しない機能やデバイスもある、という事は念頭に置いて頂きたい。例えば、関連する情報としては、最近のLinuxカーネルメーリングリスト(LKML)では、以下のようなやり取りが行われた。

Florian Weimerは、彼の2.4.20で安定動作しているシステムが、彼が試した2.6.0-test3では、HyperThreadingが動作しないと報告した。原因は、彼のマシンが完全なACPIをサポートしていなかったという以前の経験から、ACPIのコンフィグレーション設定に「Enumeration Only」を設定していたからである。

Greg Norrisは、「Enumeration Only」の時には、menuconfig help textに書いてあるように、bootup時の「acpismp=force」パラメータが必要になると答えたのだが、このHelpテキストはわかり難く、また「acpismp=force」がbootup時のパラメータであるという説明も十分ではなかった。さらには、Hugh Dickinsが、全くACPIをサポートしないシステムにおいても、この「acpismp=force」パラメータが必要になると指摘したため、ACPIの開発者たちは、この混乱状況を認めて、次期リリース(-rc3)では、改善する事になった。