Ubuntu 12.04 x86 64ビットで新しいカーネルをコンパイルすることに興味があります。
このwikiページ は基本的に このブログ のミラーであり、多くのステップがあります(git、など)私には役に立たないように見えます。
以前のリリース/ディストリビューションでは、.config
ファイルを作成し、必要に応じてMakefile
を変更してから、make
を実行するだけで済みました。
Ubuntuでこれを行う簡単な方法はありますか?
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カスタマイズが含まれています。
.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エントリなどの追加も処理されます。
手順は次のとおりです。 この手順は nixCraft の 方法:Linuxカーネル2.6をコンパイルする ----かなり近代化されています。
アップストリーム カーネルソースコードは kernel.org で入手できます。バージョン .16.1 (この記事の執筆時点での最新の安定したカーネル)がここで使用されます。そのため、異なるバージョンを使用している場合は、これらのコマンドを変更する必要があります。
カーネルソースコードは現在. tar . xz アーカイブで提供されているため、必要なバージョンの「tar.xz」リンクをクリックしてください。
アーカイブをダウンロードしたディレクトリに cd
ingした後、 tar
でそれを抽出できます:
tar xf linux-3.16.1.tar.xz
Ubuntuの ツールチェーン (gcc
、make
など)を取得するには、 build-essential メタパッケージ:
Sudo apt-get update
Sudo apt-get install build-essential
make
ターゲットxconfig
およびmenuconfig
によって、カーネルに入る内容を構成する合理的にユーザーフレンドリーな2つの方法が提供されます。
xconfig
はグラフィカル構成ユーティリティを実行しますが、menuconfig
はテキストベースです(つまり、そのインターフェイスは端末内に完全に表示されます)。それぞれ、 build-essentialによって提供される追加のソフトウェアnot)が必要です 。
グラフィカルに構成するには、 libqt4-dev および 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.1
(vmlinuz
のコピー)、config-3.16.1
(カーネル構成パラメーターを格納するテキストファイル)、およびSystem.map-3.16.1
( カーネルシンボルルックアップテーブル )を/boot
に配置します。詳細については、 Hadronによるこのcomp.os.linux.miscの投稿 および man installkernel
を参照してください。
このセクションは、部分的に Kernel/Compile 。の情報に基づいています
カーネルが必要な場所になったら、次のものが必要です。
ブートローダー の設定のエントリなので、選択してそこから起動できます。
initial RAM filesystem 、カーネルがドライバーをロードして /
filesystem をマウントする環境。
(古いカーネルをインストールしている場合、またはカーネルを構成している場合 新しいudevの代わりにdevfsを使用する 、代わりに initial ramdisk をセットアップする必要がある場合があります。代わりにそれが必要であることを知ってください、 man initrd
を参照してください。)
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ブート順序を変更するにはどうすればよいですか? を参照してください
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