読者です 読者をやめる 読者になる 読者になる

Linux-2.6.37をビルド、インストールする

linux ubuntu

x86系統向けに Linuxをビルドしたことないなってことでビルド、
インストールをしてみた。組み込み向けだとしたことあるけど、
組み込み向けだと、大して有効にする機能もないのでね。
/boot/以下にある configファイルを見ると、いらない機能が
いっぱい入っていたので、それも取り除きたいなという目的もあります。

開発環境

  • Ubuntu10.10
  • x86_64
  • Intel(R) Core(TM)2 Duo CPU T7500 @ 2.20GHz


カーネルの取得は
ftp://ftp.jm.kernel.org/pub/linux/kernel/v2.6:
から行いました。

ビルドツールのインストール

まあカーネルをビルドするような人であれば、すでにビルドツール揃っていると
思うんだけど、そうでない人もいるだろうので示します。

  % sudo aptitude install build-essential  # コンパイラなど
  % sudo aptitude install kernel-package   # debパッケージ化のツール等
  % sudo aptitude install libncurses5-dev  # menuconfig用

カーネルコンフィギュレーションGUIベースでやる場合は他に
qtなどのグラフィックライブラリが必要になるかと思います。
今回は localmodconfig, menuconfigと使います。

並列レベルの設定

最近のマシンであればマルチコアだろうので、それを活かす設定にしましょう。

  % export CONCURRENCY_LEVEL=4

環境に応じて変えてください。調べてみると指定するとうまくいかないケースと
いうのもあるみたいなので、ビルドがうまくいかなかったら unsetするのが
よいかと思います。私の環境ではこれで問題ありませんでした。

カーネルコンフィギュレーション

好きなコンフィグオプションでコンフィギュレーションを行います。
今回は localmodconfigを初めに行い、その後調整を行いました。
oldconfig, localmodconfigして、.configを眺めて、menuconfigで
調整というのが個人的にはいいんじゃないかなと思います。

  % make localmodconfig
  % less .config # 確認
  % make menuconfig # 微調整

今回は localmodconfigでだいたい文句はなかったんですけど、
CD関連のファイルシステムの機能が disableになっていたので
その部分だけ変更しました。

ビルド

管理が簡単に行えるように, debパッケージ化します。

  % sudo make-kpkg clean
  % sudo make-kpkg –initrd –revision=リビジョン \
        kernel_image kernel_headers

リビジョンは日付でも付けとけばいいんじゃないかと思います。
問題がなければ、これでカーネルとヘッダファイルの debパッケージが
一つ上のディレクトリにできているはずです。

インストール

dpkgパッケージをインストールするだけです。

  % sudo dpkg -i linux-image*.deb
  % sudo dpkg -i linux-headers*.deb

これで grubの設定ファイルも書き換えてくれます。基本的に問題ないと
思うけど、一応 /boot/grub/grub.cfgを確認しましょう。

再起動

インストールしたカーネルを選択しましょう。grub.cfgの一番上に書いて
おけばそれでブートすると思います。

確認

最後に対象のカーネルでブートしたかを確認します。

  % uname -a
  Linux zon 2.6.37 #2 SMP Sat Jan 29 15:22:49 JST 2011 x86_64 GNU/Linux

目的のカーネルが使用されていますね。

まとめ

Linuxカーネルをビルド・インストールする方法を示しました。学生時代
出たばっかりの無線ドライバの設定を行って Oopsとなってしまい、
幾分トラウマがありましたが、最近は Linuxもずいぶん安定したものに
なっており、手順をちゃんとすれば簡単にカーネルを自分でビルドできます。


次の 2.6.38も気になる機能がありますので、そのときまたビルドして
インストール使用と思います。