ubuntuのカーネルをコンパイルする

ubuntuのカーネルの設定を変えたくてコンパイルしたのでメモ。

$ sudo apt-get install linux-image-2.6.32-26-generic

ビルド環境一式は入れてあったので書かないけど、たぶんbuild-depオプションで入るんじゃないかな?こういう感じ。

$ sudo apt-get build-dep linux-image-2.6.32-26-generic

戻ってメモ。changelogを書く

$ dch -i

flavourのファイルをコピー。便宜上新しいカーネルをnewkernelとしています。適当に置き換えてください。

$ cp debian.master/config/i386/config.flavour.generic debian.master/config/i386/config.flavour.newkernel

ユーティリティのスクリプトに実行属性がついてないのでつけて

$ find debian/scripts/ -type f -exec chmod 755 {} \;

configをアップデートします。

$ ./debian/rules updateconfigs

カーネルの設定をします。

$ ./debian/rules editconfigs

どのカーネルのflavourを設定するか一つづつ尋ねられますが、自分が作った設定以外はNoでスキップして自分の設定だけYと答えます。

  • Run menuconfig on i386/config.flavour.newkernel… Press a key.

make menuconfigの画面になるので適宜設定して保存します。

ネタ元のところにはバックアップするならと書いてるので、とりあえず作った設定をコピっとく。

$ cp debian.master/config/i386/config.flavour.newkernel ../.

コンパイルのための設定をコピーして作る。

$ cp debian.master/abi/2.6.35/i386/generic debian.master/abi/2.6.35/i386/newkernel
$ cp debian.master/abi/2.6.35/i386/generic.modules debian.master/abi/2.6.35/i386/newkernel.modules

debian.master/etc/getabisファイルを編集する。

$ vi debian.master/etc/getabis

作った設定ファイル名を追加。

getall i386 generic generic-pae 386
↓
getall i386 generic generic-pae 386 newkernel

同じくdebian.master/rules.d/i386.mkファイルも編集。

$ debian.master/rules.d/i386.mk
flavours        = generic generic-pae 386
↓
flavours        = generic generic-pae 386 newkernel

設定ファイルをコピー。コピーしたファイルを適当に編集。

$ cp debian.master/control.d/vars.generic debian.master/control.d/vars.newkernel

make-kpkgだとCONCURRENCY_LEVEL=が、ubuntuのカーネルソースパッケージだと、DEB_BUILD_OPTIONS=parallel=にCPU数を入れると並列コンパイルできるみたいです。 デュアルコアなのでとりあえず3にしておきました。

$ fakeroot debian/rules clean
$ DEB_BUILD_OPTIONS=parallel=2 skipabi=true skipmodule=true fakeroot debian/rules binary-newkernel