Fedora のカーネルコンパイル

覚書。
基本的には
http://fedoraproject.org/wiki/Docs/CustomKernel
の要約&和訳なり

準備

以下のパッケージをインストール

  • rpmdevtools
  • yum-utils

ソースの入手

なお、以下は一般ユーザでの実行が推奨されている。

1. 環境の構築

$ rpmdev-setuptree

これでホームにrpmbuildというディレクトリができる。
このrpmbuildがカーネルコンパイルする作業場所になる。


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

$ yumdownloader --source kernel


3. カーネルソースに関する依存関係の解決

$ sudo yum-builddep kernel-.src.rpm

なお、手元のFedora9では 部が 2.6.27.12-78.2.8.fc9 となった。(2009/02/17現在)


4. カーネルソースのインストール

$ rpm -Uvh kernel-.src.rpm

当然ながら kernel-.src.rpmがカレントディレクトリにあることを前提にしている。
このコマンドにより rpmbuild内にソース関連のファイルが作られる。
なお, ユーザがいないからrootにしとくぜ 的な警告は無視してOKらしい。

カーネルソースツリーの生成

$ cd ~/rpmbuild/SPECS
$ rpmbuild -bp --target=`uname -m` kernel.spec

これでソースツリーが rpmbuild/BUILD/kernel-/linux-. に出力される。
は uname -m の出力に同じ。

オプションの設定

1. ディレクトリ rpmbuild/BUILD/kernel-/linux-.に移動
手元の環境だと linus-2.6.27.i586
ちなみに rpmbuild/BUILD/kernel-/vanilla-2.6.27 ってのは手を加えていないlinux kernelと思われ。


2. .configファイルをコピー

$ cp configs/kernel--.config .config
$ make oldconfig


3. .configファイルの編集
コンソールなら

$ make menuconfig

Xなら

$ make xconfig

rpmの生成

1. .configの先頭に以下の一行を追加

# `uname -i の出力結果`

例)

# i386


2. .configファイルを rpmbuild/SOURCES にコピー

$ cp .config ~/rpmbuild/SOURCES/config-


3. ~/rpmbuild/SPECSに移動して、kernel.specを編集
以下の一行を追加

%define buildid .<好きな文字列>

要するにカーネルを区別するための名前
たとえば

%define buildid .custom_kernel_20090217


4. rpmのビルド

$ rpmbuild -bb --target=`uname -m` kernel.spec

あたりまえだけどすげー時間かかります。

カーネルのインストール

$ rpm -ivh ~/rpmbuild/RPMS//kernel-..rpm

しかし、なぜか手元の環境では alredy installed となりインストールに失敗。
原因は調査中