カーネル2.6の再構築
作成 : 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 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