カーネル2.6の再構築

[サーバの実験室 Redhat/Fedora]

作成 : 2005/05/16

"サーバの実験室"の検索


カーネルの再構築

NTFSサポートを有効にすることを例に、カーネル再構築の手順を追ってみる。

カーネルソースのダウンロードと展開

Fedora Core 3から、kernel-sourceパッケージはなくなったらしい。 kernel-(バージョン).src.rpmというSRPMパッケージを入手する。 理研のFTPサイトなら、/Linux/fedora/core/3/SRPMSとか/Linux/fedora/core/pudates/3/SRPMSに置いてある。

ダウンロードしたSRPMパッケージをインストールする。 /usr/src/redhat/SPECSディレクトリと/usr/src/redhat/SOURCEディレクトリにインストールされる。

# rpm -ivh kernel-2.6.11-1.14_FC3.src.rpm
   1:kernel                 ########################################### [100%]

    次のディレクトリにインストールされる
        /usr/src/redhat/SPECSディレクトリ
            kernel-2.6.spec

        /usr/src/redhat/SOURCEディレクトリ
            kernel-2.6.11-*.config : サンプルコンフィグ
            linux-2.6.11.tar.bz2   : カーネルソース
            *.patch                : パッチ
            patch-2.6.11.7bz2      : パッチ

ソースを展開し、パッチを適用する。 targetには、"uname -m"で表示されるハードウェア名を指定する。 /usr/src/redhat/BUILD/kernel-2.6.11/linux-2.6.11ディレクトリに展開される

# uname -r
i686
# cd /usr/src/redhat/SPECS
# rpmbuild -bp --target=i686 kernel-2.6.spec

    /usr/src/redhat/BUILD/kernel-2.6.11/linux-2.6.11ディレクトリにソースが展開される

ソースディレクトリに移動

ソースディレクトリに移動する。 以下の作業は、/usr/src/redhat/BUILD/kernel-2.6.11/linux-2.6.11ディレクトリで実施する。

# cd /usr/src/redhat/BUILD/kernel-2.6.11/linux-2.6.11

make mrproper

この操作では、カーネルをビルドするときに生成されたすべてのファイルと設定ファイル(.configファイル)を削除する。 つまり初期化なのだが、カーネルをコンパイルする前に実行したほうがいいようだ。

# make mrproper

カーネルの設定

カーネルの設定を.configファイルに記述する。 ソースのconfigsディレクトリに元となる設定ファイルがある。 それを.configにリネームし、それを元に設定をする。

# ls configs
kernel-2.6.11-i586-smp.config  kernel-2.6.11-i686-smp.config
kernel-2.6.11-i586.config      kernel-2.6.11-i686.config

    いずれかを.configにリネームして使う

# cp configs/kernel-2.6.11-i686.config .config

GTK+ベースのmake gconfigやCUIベースのmake menuconfigを使用して、どの機能をカーネルに組み込むかメニュー形式で選択する。 選択する操作はどのやり方でも同じで、'Y'なら機能を組み込む、'N'なら機能を組み込まない、'M'ならモジュールとして提供する。

NTFSサポートを有効にするには、"File system" -> "DOS/FAT/NT Filesystem" -> "NTFS file system support"を'Y'または'M'にする。

# make menuconfig

make menuconfig

# make gconfig

make gconfig

Makefileの編集

必要であれば、Makefileファイルを修正する。 "EXTERAVERSION"はプレフィックスのようなもので、"2.6.11-prep"という名前のカーネルができる。

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 11
EXTRAVERSION = -prep
NAME=Woozy Numbat

カーネルのコンパイル

設定が終わったら、カーネルをコンパイルする。 結構、時間がかかる。 arch/i386/bootディレクトリにbzImageという名前のカーネルが作成される。 それと、すべてのカーネルシンボルのアドレスを記述したSystem.mapというファイルも作成される。

# make bzImage
....
Root device is (3, 6)
Boot sector 512 bytes.
Setup is 5482 bytes.
System is 1613 kB
Kernel: arch/i386/boot/bzImage is ready

    arch/i386/bootディレクトリにbzImageという名前のカーネルが作成される

カーネルモジュールのコンパイルとインストール

カーネルモジュールのコンパイルとインストールをする。 カーネルモジュールは、/lib/modules/kernel-2.6.11-prepディレクトリにインストールされる。

# make modules
# make modules_install

    /lib/modules/2.6.11-prepディレクトリにカーネルモジュールがインストールされる

カーネルのインストール

カーネルbzImage/bootディレクトリにコピーする。 名前はvmlinuz-2.6.11-prepにする。

# cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.11-prep

System.mapファイルを/bootディレクトリにコピーする。 名前はSystem.map-2.6.11-prepにする。

# cp System.map /boot/System.map-2.6.11-prep

カーネルを起動するときに必要なモジュールをまとめて、/bootディレクトリにinitrdファイルを作成する。 名前はinitrd-2.6.11-prep.imgにする。

# mkinitrd /boot/initrd-2.6.11-prep.img 2.6.11-prep

installkernelを使うと、上記の三つの作業をまとめてやってくれる。

# installkernel 2.6.11-prep arch/i386/boot/bzImage System.map

GRUBの設定

作成したカーネルから起動できるよう、/boot/grub/grub.confファイルを編集する。 これまで安定して動作していたカーネルからも起動できるよう、設定を残しておこう。

# /dev/hda1がbootパーティション
# /dev/hda2がルートパーティション

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You do not have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /, eg.
#          root (hd0,1)
#          kernel /boot/vmlinuz-version ro root=/dev/hda2
#          initrd /boot/initrd-version.img
#boot=/dev/hda
default=1
timeout=30
splashimage=(hd0,0)/grub/splash.xpm.gz
#hiddenmenu
title Fedora Core (2.6.9-1.667)
        root (hd0,1)
        kernel /vmlinuz-2.6.9-1.667 ro root=/dev/hda2
        initrd /initrd-2.6.9.1-667.img
# 作成したカーネルから起動するための設定
title Fedora Core (2.6.11-prep)
        root (hd0,1)
        kernel /vmlinuz-2.6.11-prep ro root=/dev/hda2
        initrd /initrd-2.6.11-prep.img


[サーバの実験室 Redhat/Fedora]