結構頻繁にLinuxのカーネルを再構築する機会に遭遇するのですが,その度にGoogleでWebページを検索するのも面倒になってきたので,ここで一度まとめておきます.
ソースコード/パッチファイルのダウンロード
Linux Kernelのソースコードおよびパッチファイルは,www.kernel.orgから入手することが出来ます.また,Linux KernelはRingServerでもミラーされていますので,負荷分散やダウンロード速度などを考慮するとこれらのミラーサイトを利用する方が良いと思います.以下に列挙するURLから,ネットワーク的に近いサーバを選択して下さい.
- ftp://core.ring.gr.jp/pub/linux/kernel.org/kernel/
- ftp://ring.etl.go.jp/pub/linux/kernel.org/kernel/
- ftp://ring.nacsis.ac.jp/pub/linux/kernel.org/kernel/
- ftp://ring.asahi-net.or.jp/pub/linux/kernel.org/kernel/
- ftp://ring.ip-kyoto.ad.jp/pub/linux/kernel.org/kernel/
- ftp://ring.jah.ne.jp/pub/linux/kernel.org/kernel/
- ftp://ring.so-net.ne.jp/pub/linux/kernel.org/kernel/
- ftp://ring.exp.fujixerox.co.jp/pub/linux/kernel.org/kernel/
アーカイブの展開およびパッチの適用
カーネルの再構築はrootで行いますので,suコマンドでrootに変更します.また,カーネルのソースコードは,/usr/srcディレクトリ下に展開します.尚,LANG設定は日本語の場合だと文字化けなどが起こることもありますので,LANG設定はCにしておいた方が無難です.
% su - passwd: (パスワードを入力) # LANG=C # tar xzvf linux-x.x.x.tar.gz -C /usr/src
また,パッチを適用する際は,パッチファイルを適用するカーネルのディレクトリにコピーした後にpatchコマンドを用いて適用します.
# cp xxx.patch linux-x.x.x/ # patch -p1 < xxx.patch
シンボリックリンクの更新
アプリケーションのコンパイルや動作の際に,/usr/src/linuxディレクトリ下の情報を必要とする場合があります.そのため,/usr/src/linuxのリンク先が展開したディレクトリになるように,シンボリックリンクを更新します.
# rm /usr/src/linux # ln -s /usr/src/linux-x.x.x /usr/src/linux
カーネルの環境設定
カーネルの環境設定には,いくつかの方法があります.まず,はじめに既存のカーネル環境(現在の環境設定)を引き継ぎたい場合は,設定ファイルを.configというファイル名でコピーした後に,make oldconfigコマンドを使用します.既存のカーネルの設定ファイルは,/usr/src/linux-x.x.x/configs/kernel-x.x.x-i686.confiに存在します(x.x.xは,現在使用しているカーネルのバージョン).現在使用しているカーネルのバージョンを調べるときは,unameコマンドを利用します.
# uname -v 2.4.31 # cp /usr/src/linux-2.4.31/configs/kernel-2.4.31-i686.config ./.config # make oldconfig
カーネルの環境設定方法は,以下の3種類があります(カーネルのパラメータを設定する際のツール).
- make config
- make menuconfig
- make xconfig
GUI環境が利用できる場合は,make xconfigコマンドが便利です(kernel 2.6.xでGnomeを利用している場合はmake gconfig,kernel 2.6.xでKDEを利用している場合はmake kconfig).設定が終了したら,保存を選んで終了します.
カーネルのコンパイル
以下のコマンドでカーネルのコンパイルを行います(kernel 2.6.xから,make depコマンドはなくなった).
# make dep # make clean # make bzImaze # make modules # make modules_install # make install
また,SCSIを使用する(ルートパーティションがSCSIのハードディスク上に存在する)場合は,initrdイメージを作成します(x.x.xは作成したカーネルのバージョン).
# /sbin/mkinitrd /boot/initrd-x.x.x.img x.x.x
ブートローダの設定
最後に,ブートローダの設定を修正します.設定方法は,GRUBとLILOの場合で異なります.設定後,リブートして作成したカーネルで起動させます.
GRUBの設定ファイルが存在する場所は,/etc/grub.confまたは/boot/grub/grub.confとなります.この設定ファイルに,作成したカーネルで起動するための設定を加えます(titleは,Linux-newとする).デバイス名(hd0, /dev/hda1など)は,各自の設定ファイルを参考にして設定して下さい.
title Linux-new root (hd0,0) kernel /vmlinuz-x.x.x ro root=/dev/hda1 acpi=on initrd /initrd-x.x.x.img title Linux-up root (hd0,0) kernel /vmlinuz-2.4.31 ro root=/dev/hda1 acpi=on initrd /initrd-2.4.31.img
LILOの設定ファイルが存在する場所は,/etc/lilo.confです.この設定ファイルに,作成したカーネルで起動するための設定を加えます(labelは,Linux-newとする).デバイス名(/dev/hda1など)は,各自の設定ファイルを参考にして設定して下さい.
image=/boot/vmlinuz-x.x.x label=Linux-new root=/dev/hda1 initrd=/boot/initrd-x.x.x.img read-only image=/boot/vmlinuz-2.4.31 label=Linux-up root=/dev/hda1 initrd=/boot/initrd-2.4.31.img read-only
LILOの場合は,設定ファイルを修正後に以下のコマンドを実行します.
# /sbin/lilo
参考URL