Linuxでデバイスが動かなくて困った。
といった経験ないでしょうか?

また、
高速化したい。軽量化したい。
というご要望ありませんか?

そんな要望に答える最終手段。
カーネルの再構築に挑戦しましょう。

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


まずは、Linuxカーネルのソースをダウンロードしましょう。
The Linux Kernel Archives
から右上のLatest Stable Kernel:の下のバージョン番号を
クリックしてダウンロードしてください。
2010年 2月 9日 火曜日 時点では、2.6.32.7がStableバージョンです。

ファイルの展開



cd ~/Downloads/
tar xvjf linux-2.6.32.7.tar.bz2

(2.6.32.7は現在のダウンロードしたバージョンに置き換えて下さい。
linux-まで入力したら[tab]キーで補完すれば間違いないでしょう。

必要なパッケージのインストール


開発ツールのインストール



カーネルをコンパイルするために開発ツールをインストールします。

su
(パスワード入力)
yum groupinstall 開発ツール



mkinitrdのインストール



カーネルのRAMディスクを作るために
mkinitrdパッケージをインストールします。

yum install mkinitrd


dracutがRAMディスクを作成してくれます。

ncurses-develのインストール



カーネルのパラメータ等を設定するメニューを
表示させられるようにncurses-develをインストールします。

yum install ncurses-devel


root権限からログアウト



無事必要なパッケージをインストール出来たら、

exit

して、root権限からログアウトします。


カーネルパラメータの設定



make oldconfig


カーネルパラメータ等を設定します。

cd linux-2.6.32.7
cp /boot/config-2.6.31.12-174.2.3.fc12.i686.PAE .
make oldconfig

すると、config-2.6.31.12-174.2.3.fc12.i686.PAEの
設定が読み込まれます。
さらに、Linuxカーネルは日々進歩しているので、
2.6.31.12カーネルから変化したカーネルパラメータについての
ON、OFF、モジュールかするかどうかについて質問されます。
DEBUGはn
m、もしくはMにできるもの(モジュールに出来るもの)は、
それぞれ、mMを選択。
それ以外は、yを選べば問題ないと思われます。

make menuconfig




make menuconfig

して、カーネルパラメータの設定をします。
CPUタイプの設定をするだけでかなり高速化されます。
また、KVMやXenやVMwareなどの仮想化を使わないならば、
VirtualizationをOFFにしてしまいましょう。

コンパイル



カーネル、カーネルモジュールをコンパイルするには、

make

と入力するだけです。
数時間かかるので寝る前にでも実行しましょう。


インストール



コンパイルしたカーネル、カーネルモジュールをインストールするには、

su -c "make modules_install install ; mkinitrd -f initramfs-2.6.32.7.img 2.6.32.7"
(パスワード入力)

2.6.32.7の所はダウンロード、コンパイルしたカーネルバージョンに
置き換えること。

grub.confの設定



make installしたことで、
/etc/grub.confに新しいカーネルが登録されます。
しかし、デフォルトで起動する設定に変更されていない。
そのまま再起動したままだと、
以前(Fedoraもしくはディストリビュータ)が
用意したカーネルが起動してしまうので、
新しく再構築したカーネルを起動させるために

default=1

となっている箇所を

default=0

としておく。
(環境によっては、
default=の後の数字が1意外になっているかもしれない。)


再起動



システムを再起動してください。
新しいカーネルで起動できたら、

uname -r

を実行して、

2.6.32.7

など自分がコンパイルしたカーネルのバージョンとして
表示しているか確認してください。

もし、nvidiaなどのグラフィックカードのドライバを
インストールする必要がある場合は、
新しいカーネルで起動した後、
make、make installなどして
ドライバをコンパイルし、
modprobeでモジュールを読み込んでください。


起動できない、
コンパイルできない!!といった場合は、コメントもしくは、
Twitterへ。