web-dev-qa-db-ja.com

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

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

このwikiページ は基本的に このブログ のミラーであり、多くのステップがあります(git、など)私には役に立たないように見えます。

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

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

41
user827992

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エントリなどの追加も処理されます。

39
ish

手順は次のとおりです。 この手順は nixCraft方法:Linuxカーネル2.6をコンパイルする ----かなり近代化されています。

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

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

カーネルソースコードは現在. tar . xz アーカイブで提供されているため、必要なバージョンの「tar.xz」リンクをクリックしてください。

screenshot from kernel.org, showing kernel source archives available for download

アーカイブをダウンロードしたディレクトリに cd ingした後、 tar でそれを抽出できます:

tar xf linux-3.16.1.tar.xz

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

Ubuntuの ツールチェーンgccmakeなど)を取得するには、 build-essential Install build-essential メタパッケージ:

Sudo apt-get update
Sudo apt-get install build-essential

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

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

グラフィカルに構成するにはlibqt4-dev Install libqt4-dev および pkg-config Install pkg-config およびmake xconfigを実行します。

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

端末で設定するにはlibncurses5-devをインストールします(これは Hann に感謝しますinfo)そして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.1vmlinuzのコピー)、config-3.16.1(カーネル構成パラメーターを格納するテキストファイル)、およびSystem.map-3.16.1カーネルシンボルルックアップテーブル )を/bootに配置します。詳細については、 Hadronによるこのcomp.os.linux.miscの投稿 および man installkernel を参照してください。

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

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

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

mkinitramfs を使用してinitramfsを生成します:

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

9.10以降 buntuのデフォルト であったGRUB2ブートローダーの設定を更新すると、 新しいカーネルが自動的に検出されるはずです から起動するオプションを追加します。

Sudo update-grub

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

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

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

19
Novice

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
3