カーネルコンパイル · 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-essential2.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/linux2.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 -p12.4 カーネルの設定
現在の作業中のカーネルの設定を新しいカーネルの基礎として使用することをお勧めします。したがって、既存の設定を /usr/src/linux にコピーします:
make clean && make mrproper
cp /boot/config-`uname -r` ./.config次に、
make menuconfigを実行すると、カーネル設定メニューが表示されます。Load an Alternate Configuration File に移動し、.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-essential3.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/linux3.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 -p13.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.3GRUBの設定はDebian Etchでは非常に簡単です。私たちがしなければならないのは、次を実行することだけです:
update-grubこれにより、新しいカーネルとramdiskが検出され、/boot/grub/menu.lst が更新されます。
システムを再起動します:
shutdown -r nowブートプロンプトで、新しいカーネルを選択します(デフォルトで選択されるはずです)。すべてがうまくいけば、新しいカーネルが起動します。実際に新しいカーネルを使用しているかどうかを確認するには、次を実行します:
uname -rこれにより、次のような出力が表示されるはずです:
2.6.21.3システムが起動しない場合は、再起動し、ブートプロンプトで古いカーネルを選択します。再度、動作するカーネルをコンパイルしてみてください。動作しないカーネルのスタンザを /boot/grub/menu.lst から削除するのを忘れないでください。
4 リンク
- Debian: http://www.debian.org
- The Linux Kernel Archives: http://www.kernel.org
新しい投稿を受信箱で受け取る
スパムはありません。いつでも購読を解除できます。