カーネルを再コンパイルする簡単な方法は何ですか?


41

Ubuntu 12.04 x86 64ビットで新しいカーネルをコンパイルすることに興味があります。

基本的にこのブログのミラーであるこのWikiページを見つけましたが、多くの手順(gitなど)が私には役に立たないように見えます。

以前のリリース/ディストリビューションでは、必要に応じて.configファイルを作成して変更Makefileし、その後実行するだけでmake完了していました。

Ubuntuでこれを行う簡単な方法はありますか?


回答:


39

1.を使用apt-get sourceして、カーネルのUbuntuバージョンをダウンロードします

apt-get source linux-image-$(uname -r)

以下を含むフォルダーを提供します。

linux-3.2.0 linux_3.2.0-26.41.dsc
 linux_3.2.0-26.41.diff.gz   linux_3.2.0.orig.tar.gz

太字の差分には、すべてのUbuntu / Debianカスタマイズが含まれています。

2.独自のカーネルを.config使用してストックカーネルを構築するには、「昔ながらの」Debian make-kpkgメソッドを使用します

これは、wikiで説明されている別の昔ながらの方法です。

sudo apt-get install kernel-package

初めてカーネルをコンパイルする場合:

sudo apt-get build-dep linux-image-$(uname -r)

次にcdソースディレクトリ(ここlinux-3.2.0)に移動し、実行中のカーネルの構成でファイルmake oldconfigを作成するか、このディレクトリに.configサードパーティをコピーします.config

テキスト設定とグラフィカル設定のどちらを使用するかに応じて、次をインストールします。

(テキスト)

sudo apt-get install libncurses5 libncurses5-dev

(グラフィカル)

sudo apt-get install qt3-dev-tools libqt3-mt-dev

そして、実行します:

(テキスト)

make menuconfig

(グラフィカル)

make xconfig

完了したら、次を実行します。

fakeroot make-kpkg -j N --initrd --append-to-version=my-very-own-kernel kernel-image kernel-headers

ここでN、並行して実行するジョブの数(通常、使用しているCPUの数)my-very-own-kernelは、このビルドを識別するカスタム文字列です。

完了すると、カーネルイメージとヘッダーファイルは、親ディレクトリのdebsとして準備が整います。あなたがそれらをインストールすることができsudo dpkg -i、またなど、GRUBエントリを追加するの世話をするであろう、


なぜ彼らはこの差分について何も言わない、私にとっては差分は単なる差分であり、すべてを含むことができます。
user827992

私は知りません、あなたは彼らに尋ねる必要があります(Canonical Kernel TeamのGoogle)。私はあなたにそれを構築する方法を教えました;)
ish

1
さて、最後の質問、この圧縮差分を適用する方法は?:DIはlinux-3.2.0ディレクトリに移動して実行する必要がありますpatch -p1 <../patch.diffか?
-user827992

1
差分を適用する必要はありませんapt-get source ...すでにあなたのためにそれをしました!
-ish

2
-1「昔ながら」と呼んでいますが、私は時代遅れと呼んでいます。fakeroot debian/rules editconfigsfakeroot debian/rules cleanfakeroot debian/rules binary正しい、問題のない方法です。
アレクサンドルドゥビンスキー

19

手順は次のとおりです。この手順は、nixCraftHow to:Compile Linux kernel 2.6に基づいていますが、かなり近代化されています。

ビルドするカーネルのソースコードをダウンロードして抽出します。

kernel.orgアップストリームカーネルソースコードを入手できます。ここでは、バージョン3.16.1(この記事の執筆時点での最新の安定したカーネル)が使用されます。そのため、異なるバージョンを使用している場合は、これらのコマンドを変更する必要があります。

カーネルソースコードは現在、で提供されています。タールxzアーカイブは、任意のバージョンで「tar.xz」リンクをクリックします。

kernel.orgのスクリーンショット。ダウンロード可能なカーネルソースアーカイブを示しています

cdアーカイブをダウンロードしたディレクトリに移動した後、次のコマンドで展開できますtar

tar xf linux-3.16.1.tar.xz

必要なビルドツールをインストールし、カーネル構成を実行します。

Ubuntuのツールチェーンgccmakeなど)を取得するには、ビルドに不可欠なビルド必須のインストールメタパッケージをインストールします。

sudo apt-get update
sudo apt-get install build-essential

カーネルに入る内容を構成する合理的にユーザーフレンドリーな2つの方法が、makeターゲットxconfigとによって提供されますmenuconfig

xconfigグラフィカル構成ユーティリティを実行しますが、menuconfigテキストベースです(つまり、そのインターフェイスは端末内に完全に表示されます)。それぞれにbuild-essentialで提供されていない追加のソフトウェアが必要です。ビルド必須のインストール

グラフィカル設定するには、 libqt4-devlibqt4-devをインストールします pkg-configpkg-configをインストールするをインストールして実行しますmake xconfig

sudo apt-get install libqt4-dev pkg-config
make xconfig

ターミナル設定するには、インストールしてlibncurses5-dev(この情報について Hannuに感謝します)、実行しますmake menuconfig

sudo apt-get install libncurses5-dev
make menuconfig

設定済みのカーネルを構築します。

最初にこれを実行してカーネルをコンパイルし、作成しますvmlinuz

make

vmlinuz「カーネル」です。具体的には、GRUBまたは使用する他のブートローダーによって圧縮解除され、メモリにロードされるのはカーネルイメージです。

次に、ロード可能なカーネルモジュールをビルドします

make modules

新しくビルドしたカーネルをインストールします。

これらのmakeコマンドが正常に完了したと仮定して、新しいカーネルをインストールします。最初にモジュールをインストールします。

sudo make modules_install

次に、カーネル自体をインストールします

sudo make install

これにより、vmlinuz-3.16.1(のコピーvmlinuz)、config-3.16.1(カーネル構成パラメーターを格納するテキストファイル)、およびSystem.map-3.16.1カーネルシンボルルックアップテーブル)がに格納さ/bootます。詳細については、Hadronおよびによるcomp.os.linux.miscの投稿を参照してくださいman installkernel

最終的なセットアップ。これにより、カーネルを起動してシステムを起動できます。

このセクションは、Kernel / Compileの情報に一部基づいています。

カーネルが必要な場所になったら、次のものが必要です。

以下を使用してinitramfs生成しますmkinitramfs

cd /boot
sudo mkinitramfs -ko initrd.img-3.16.1 3.16.1

GRUB2ブートローダーの構成を更新すると(9.10 以降Ubuntuのデフォルトになっています)、新しいカーネルが自動的に検出され、そこからブートするオプションが追加されます。

sudo update-grub

カーネルを試してください。

これで、再起動して新しいカーネルをテストできます。GRUBブートメニューを表示するには、起動中に長Shift押しするか押す必要がありEscます。GRUBブートメニューでは、インストールされているさまざまなカーネルから選択できます。

カーネル(または別のカーネル)をデフォルトにするには、GRUBのブート順序を変更するにどうすればよいですかを参照してください


ステップ3、make menuconfig必要apt get install libncurses5-dev
Hannu 14

@Hannuありがとうございます、それについて言及するのを完全に忘れました。64ビットシステムユーザーは、実行する32ビットプログラムのサポートにも「ia32-libs」を必要とする場合があります。
初心者14

バージョンに依存しないパッケージも見つけた方がいいかもしれません...何かあるかわかりません。
ハヌ14

@EliahKaganありがとうございます。今は大丈夫ですか、それとも完全に削除する必要がありますか?私はそれをすることに問題はありません。
初心者14

1
-1これはUbuntuカーネルを生成しません。.debファイルも作成しません。これは問題のレシピです。
アレクサンドルドゥビンスキー

3

(バニラではなく)Ubuntuカーネルを構築するための簡単な手順は、https//wiki.ubuntu.com/Kernel/BuildYourOwnKernelにあります

wiki全体をコピーするわけではありませんが、現在インストールしているUbuntuカーネルのバージョンをコンパイルするための最小限の手順をリストします。(最新バージョンを取得するには、次のUbuntuリリースのカーネルgitリポジトリのクローンを作成します。)Ubuntu 16.04でテスト済み。

# Get source code
apt-get source linux-image-$(uname -r)

# Install dependencies
sudo apt-get build-dep linux-image-$(uname -r)

# Compile
cd linux-4.4.0
fakeroot debian/rules clean
fakeroot debian/rules binary

# Install (obviously the versions will be different)
cd ..
sudo dpkg -i linux-image-4.4.0-38-generic_4.4.0-38.57_amd64.deb linux-headers-4.4.0-38_4.4.0-38.57_all.deb linux-headers-4.4.0-38-generic_4.4.0-38.57_amd64.deb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.