カーネルコンパイル · 2 min read · Nov 27, 2025

カーネルをコンパイルする方法 - Debian方式

各ディストリビューションには、ソースからカスタムカーネルをビルドするための特定のツールがあります。この記事では、Debian (Etch) システムでのカーネルのコンパイルについて説明します。これは、www.kernel.org から最新の未修正のカーネルソース(バニラカーネル)を使用してカスタムカーネルをビルドする方法を説明しており、ディストリビューションが提供するカーネルに依存しないようにします。また、必要な機能が含まれていない場合にカーネルソースをパッチする方法も示します。

私はこれがあなたにとって機能するという保証はしません!

1 前提条件

新しいカーネルをコンパイルする2つの方法を説明します。最初の方法を使用すると、システムにインストールできるカーネル.debパッケージが得られ、他の人と共有したり、他のDebian Etchシステムにインストールしたりできます。

2番目の方法は、「従来の」方法でカーネルをコンパイルすることです。この方法は、任意のLinuxディストリビューションで機能しますが、もちろんカーネル.debパッケージは得られません。

2 カーネル .deb パッケージのビルド

この章では、カーネルをビルドし、他の人と共有できる.debパッケージを得る方法を示します。

2.1 カーネルコンパイルに必要なパッケージのインストール

まず、パッケージデータベースを更新します:

apt-get update

次に、次のように必要なすべてのパッケージをインストールします:

apt-get install kernel-package ncurses-dev fakeroot wget bzip2 build-essential

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

次に、希望するカーネルを /usr/src にダウンロードします。www.kernel.org にアクセスし、インストールしたいカーネルを選択します。例:linux-2.6.21.3.tar.bz2(すべての2.6カーネルはここにあります:http://www.kernel.org/pub/linux/kernel/v2.6/)。次に、次のようにして /usr/src にダウンロードできます:

cd /usr/src  
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

次に、カーネルソースを解凍し、カーネルソースディレクトリへのシンボリックリンク linux を作成します:

tar xjf linux-2.6.21.3.tar.bz2  
ln -s linux-2.6.21.3 linux  
cd /usr/src/linux

2.3 カーネルソースへのパッチの適用(オプション)

新しいカーネルがデフォルトでサポートしていないハードウェア用のドライバが必要な場合や、仮想化技術やその他の最先端技術のサポートが必要な場合があります。これらのすべての場合、カーネルソースにパッチを適用する必要があります(パッチが利用可能な場合…)。

必要なパッチ(この例では patch.bz2 と呼びます)を /usr/src にダウンロードしたと仮定しましょう。これがカーネルソースに適用する方法です(/usr/src/linux ディレクトリにいる必要があります):

bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run  
bzip2 -dc /usr/src/patch.bz2 | patch -p1

最初のコマンドは単なるテストで、ソースには何も影響を与えません。エラーが表示されない場合は、実際にパッチを適用する2番目のコマンドを実行できます。最初のコマンドがエラーを表示した場合は、実行しないでください!

カーネルのプレパッチをカーネルソースに適用することもできます。たとえば、カーネル 2.6.22-rc3 のみで利用可能な機能が必要ですが、このカーネルの完全なソースはまだリリースされていません。その代わりに、patch-2.6.22-rc3.bz2 が利用可能です。このパッチを 2.6.21 のカーネルソースに適用できますが、カーネル 2.6.21.1 や 2.6.21.2 などには適用できません。これは http://kernel.org/patchtypes/pre.html で説明されています:

プレパッチはLinuxのアルファリリースに相当します。アーカイブのテストディレクトリに存在します。これらは、3部のバージョン番号を持つ前の完全リリースのソースコードに patch(1) ユーティリティを使用して適用する必要があります(たとえば、2.6.12-rc4 プレパッチは 2.6.11 のカーネルソースに適用する必要があります。たとえば、2.6.11.10 ではありません。)

したがって、2.6.22-rc3 カーネルをコンパイルしたい場合は、ステップ 3 でカーネル 2.6.21.3 の代わりに 2.6.21 のカーネルソースをダウンロードする必要があります!

これがカーネル 2.6.21 に 2.6.22-rc3 パッチを適用する方法です:

cd /usr/src   
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2  
cd /usr/src/linux  
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run  
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

2.4 カーネルの設定

現在の作業中のカーネルの設定を新しいカーネルの基礎として使用することをお勧めします。したがって、既存の設定を /usr/src/linux にコピーします:

make clean && make mrproper  
cp /boot/config-`uname -r` ./.config

次に、

make menuconfig

を実行すると、カーネル設定メニューが表示されます。Load an Alternate Configuration File に移動し、.config(現在の作業中のカーネルの設定が含まれています)を設定ファイルとして選択します:

カーネルの設定

.configファイルとして保存

次に、カーネル設定メニューをブラウズして選択を行います。終了を選択したとき、次の質問(新しいカーネル設定を保存しますか?)に対して「はい」と答えます:

新しいカーネル設定を保存

2.5 カーネルのビルド

カーネルをビルドするには、次の2つのコマンドを実行します:

make-kpkg clean  
fakeroot make-kpkg --initrd --append-to-version=-custom kernel_image kernel_headers

–append-to-version= の後に、カーネルを識別するのに役立つ任意の文字列を書くことができますが、マイナス(-)で始まり、空白を含んではいけません。

今は我慢してください。カーネルのコンパイルには数時間かかる場合があります。これは、カーネルの設定やプロセッサの速度によります。

2.6 新しいカーネルのインストール

カーネルのビルドが成功した後、/usr/src ディレクトリに2つの.debパッケージが見つかります。

cd /usr/src  
ls -l

私のテストシステムでは、これらは linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb(実際のカーネルが含まれています)と linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb(後で追加のカーネルモジュールをコンパイルする場合に必要なファイルが含まれています)と呼ばれていました。私は次のようにインストールします:

dpkg -i linux-image-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb  
dpkg -i linux-headers-2.6.21.3-custom_2.6.21.3-custom-10.00.Custom_i386.deb

(これで、2つの.debファイルを他のDebian Etchシステムに転送し、まったく同じ方法でインストールできるようになりました。これにより、再度カーネルをコンパイルする必要がなくなります。)

これで完了です。GRUBブートローダーの設定ファイル /boot/grub/menu.lst は自動的に変更され、新しいカーネル用のramdiskが /boot に作成されました。

システムを再起動します:

shutdown -r now

ブートプロンプトで、新しいカーネルを選択します(デフォルトで選択されるはずです):

新しいカーネルでブート

すべてがうまくいけば、新しいカーネルが起動します。実際に新しいカーネルを使用しているかどうかを確認するには、次を実行します:

uname -r

これにより、次のような出力が表示されるはずです:

2.6.21.3-custom

システムが起動しない場合は、再起動し、ブートプロンプトで古いカーネルを選択します。再度、動作するカーネルをコンパイルしてみてください。動作しないカーネルのスタンザを /boot/grub/menu.lst から削除するのを忘れないでください。

3 従来の方法でのカーネルのビルド

この章では、任意のLinuxシステムで使用できる別のアプローチを説明します(ramdiskの作成やブートローダーの更新などの詳細を除いて)。もちろん、カーネル.debパッケージは得られません。

3.1 カーネルコンパイルに必要なパッケージのインストール

まず、パッケージデータベースを更新します:

apt-get update

次に、次のように必要なすべてのパッケージをインストールします:

apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 build-essential

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

次に、希望するカーネルを /usr/src にダウンロードします。www.kernel.org にアクセスし、インストールしたいカーネルを選択します。例:linux-2.6.21.3.tar.bz2(すべての2.6カーネルはここにあります:http://www.kernel.org/pub/linux/kernel/v2.6/)。次に、次のようにして /usr/src にダウンロードできます:

cd /usr/src  
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.21.3.tar.bz2

次に、カーネルソースを解凍し、カーネルソースディレクトリへのシンボリックリンク linux を作成します:

tar xjf linux-2.6.21.3.tar.bz2  
ln -s linux-2.6.21.3 linux  
cd /usr/src/linux

3.3 カーネルソースへのパッチの適用(オプション)

新しいカーネルがデフォルトでサポートしていないハードウェア用のドライバが必要な場合や、仮想化技術やその他の最先端技術のサポートが必要な場合があります。これらのすべての場合、カーネルソースにパッチを適用する必要があります(パッチが利用可能な場合…)。

必要なパッチ(この例では patch.bz2 と呼びます)を /usr/src にダウンロードしたと仮定しましょう。これがカーネルソースに適用する方法です(/usr/src/linux ディレクトリにいる必要があります):

bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run  
bzip2 -dc /usr/src/patch.bz2 | patch -p1

最初のコマンドは単なるテストで、ソースには何も影響を与えません。エラーが表示されない場合は、実際にパッチを適用する2番目のコマンドを実行できます。最初のコマンドがエラーを表示した場合は、実行しないでください!

カーネルのプレパッチをカーネルソースに適用することもできます。たとえば、カーネル 2.6.22-rc3 のみで利用可能な機能が必要ですが、このカーネルの完全なソースはまだリリースされていません。その代わりに、patch-2.6.22-rc3.bz2 が利用可能です。このパッチを 2.6.21 のカーネルソースに適用できますが、カーネル 2.6.21.1 や 2.6.21.2 などには適用できません。これは http://kernel.org/patchtypes/pre.html で説明されています:

プレパッチはLinuxのアルファリリースに相当します。アーカイブのテストディレクトリに存在します。これらは、3部のバージョン番号を持つ前の完全リリースのソースコードに patch(1) ユーティリティを使用して適用する必要があります(たとえば、2.6.12-rc4 プレパッチは 2.6.11 のカーネルソースに適用する必要があります。たとえば、2.6.11.10 ではありません。)

したがって、2.6.22-rc3 カーネルをコンパイルしたい場合は、ステップ 3 でカーネル 2.6.21.3 の代わりに 2.6.21 のカーネルソースをダウンロードする必要があります!

これがカーネル 2.6.21 に 2.6.22-rc3 パッチを適用する方法です:

cd /usr/src   
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc3.bz2  
cd /usr/src/linux  
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1 --dry-run  
bzip2 -dc /usr/src/patch-2.6.22-rc3.bz2 | patch -p1

3.4 カーネルの設定

現在の作業中のカーネルの設定を新しいカーネルの基礎として使用することをお勧めします。したがって、既存の設定を /usr/src/linux にコピーします:

make clean && make mrproper  
cp /boot/config-`uname -r` ./.config

次に、

make menuconfig

を実行すると、カーネル設定メニューが表示されます。Load an Alternate Configuration File に移動し、.config(現在の作業中のカーネルの設定が含まれています)を設定ファイルとして選択します:

次に、カーネル設定メニューをブラウズして選択を行います。終了を選択したとき、次の質問(新しいカーネル設定を保存しますか?)に対して「はい」と答えます:

3.5 カーネルのビルドとインストール

カーネルをビルドするには、次のコマンドを実行します:

make all  
make modules_install  
make install

今は我慢してください。カーネルのコンパイルには数時間かかる場合があります。これは、カーネルの設定やプロセッサの速度によります。

3.6 インストール後の手順

新しいカーネルは現在インストールされていますが、新しいカーネル用のramdiskがまだ必要です(そうしないと、システムはおそらく起動しません!)、また、GRUBブートローダーに新しいカーネルについて知らせる必要があります。

まず、次のようにします:

depmod 2.6.21.3  
apt-get install yaird

次に、次のコマンドでramdiskを作成します:

mkinitrd.yaird -o /boot/initrd.img-2.6.21.3 2.6.21.3

GRUBの設定はDebian Etchでは非常に簡単です。私たちがしなければならないのは、次を実行することだけです:

update-grub

これにより、新しいカーネルとramdiskが検出され、/boot/grub/menu.lst が更新されます。

システムを再起動します:

shutdown -r now

ブートプロンプトで、新しいカーネルを選択します(デフォルトで選択されるはずです)。すべてがうまくいけば、新しいカーネルが起動します。実際に新しいカーネルを使用しているかどうかを確認するには、次を実行します:

uname -r

これにより、次のような出力が表示されるはずです:

2.6.21.3

システムが起動しない場合は、再起動し、ブートプロンプトで古いカーネルを選択します。再度、動作するカーネルをコンパイルしてみてください。動作しないカーネルのスタンザを /boot/grub/menu.lst から削除するのを忘れないでください。

4 リンク

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。