Linuxカーネル構築プロセスの各ステップで何が起こりますか?


27

カスタムカーネルを構築し、それらのカーネルを使用してUbuntuを起動する方法について多くのチュートリアルを読んで、ガイドに従って正常に起動し、カスタムカーネルを起動しましたが、ガイドの各コマンドが何をし、実際に何が起こっているのか理解できません各コマンド。

上で説明した手順Ubuntuのサイトが持つ多くの作業を行いfakerootdpkgmake-kpkg、いくつかのinitramfs、および他の恐ろしいものに動作することはなく、単に私は何が起こっているかを理解する助けにはなりません。

  • makeLinuxカーネルディレクトリでの出力は何ですか?
  • 「圧縮カーネルイメージ」を作成しますか?
  • 「圧縮されたカーネルイメージ」ファイルの名前とその場所はどこですか?
  • 何をmake modulesするの?
  • make modules前または後に行う必要がありmakeますか?
  • makeモジュールは自動的にビルドされませんか?
  • 新しくビルドされたカーネルをブート可能なカーネルのリストに追加するプロセスは(コマンドのリストだけでなく、英語で)何ですか?
  • 何をmake installするの?
  • ウィルmake install私はより多くの何もする必要はありませんように、ブート可能なカーネルの私のリストに追加?
  • 同等のものはありmake modules_installますか?

これは複数の質問に分割する必要があります。
Ciro Santilli新疆改造中心法轮功六四事件

回答:


34

上から...

  • makeカーネルイメージをコンパイルしてリンクします。これはという名前の単一のファイルですvmlinuz
  • make modulesMカーネル設定中に回答した質問ごとに個別のファイルをコンパイルします。オブジェクトコードは、新しくビルドされたカーネルに対してリンクされます。(回答済みの質問のY場合、これらはすでにの一部でvmlinuzあり、回答済みの質問のN場合はスキップされます)。
  • make installビルドされたカーネルをにインストールします/vmlinuz
  • make modules_installカーネルモジュールを/lib/modulesまたはにインストールします/lib/modules/<version>

利用可能なカーネルのリストに追加することに関しては、それはブートローダーによって処理されます。ブートローダーごとに異なりますgrubが、x86とamd64で最も一般的であるため、これについて説明します。実際には非常に簡単です。GRUBはに見え//bootおよび/lib/modules任意のもののためのそれのようなルックスが働いカーネルかもしれないと、それを追加します。はい、これは単純化された説明です。

Ubuntuのドキュメントにある余分な「恐ろしいもの」は、debパッケージを作成するための余分なものです。あなた自身のためにそれをしているとき、それをパッケージする方がはるかに良いです。時間内に切り替えます。

カーネルとモジュールのビルドは、必要な人(カーネル開発者)がモジュールのみに変更を加えることが多いため、別々に維持されます。変更を適用し、モジュールだけを再構築してインストールできます。これにより、1日20回行う必要がある場合に多くの時間を節約できます。単一のmake everythingコマンドを持つように更新されることはありません。代わりにmake && make modules && make install && make modules_install 、ドキュメントの指示どおりに実行します。ビルドプロセスは、あなたではなくカーネル開発者に有利です。そして、それはあるべき姿です。

実際には、カーネル開発者やディストリビューターパッケージャー以外の誰もがカーネルをコンパイルする理由はほとんどありません。ほとんどすべての状況で、必要なカーネル機能はすでに構築されており、あらかじめパッケージ化されたカーネルのいずれかで利用できます。例外もありますが、最近では非常にまれです。

自分でカーネルを構築することをやめさせるわけではありませんが、実際にそれを行うことをお勧めします。ゼロからカーネルを構築することは、そこですべてがどのように機能するかを学ぶための貴重なプラクティスだと思います。一部には、おそらくいつかあなた必要とする例外になるからです。しかし、一般的なカーネルとブートプロセスについても多くを学びます。あなたはそれをしたことでより良い人になります。


1
人間が読めるプロセスの説明をありがとう。いくつか疑問があります。カーネルのコンパイルでvmlinuzではなくvmlinuxが生成されました。違いは圧縮だと思います。画像を手動で圧縮する必要がありますか?ある/vmlinuzルートフォルダ内のディレクトリは?make installを実行すると、このディレクトリが作成され、新しいカーネルがそこに配置されますか?ウィルmake modules_install私の現在インストールされているモジュールを交換?vmlinuxを/ bootディレクトリに配置し、何か他のことを行う必要があると仮定します(grub構成ファイルを編集し、grub-updateなどを実行しますか?)
AnkurVj

3
その通り、違いは圧縮です。コマンドmake bzimageはそれを行うものです。/vmlinuzディレクトリではなく、バイナリファイルです。過去5年間、パッケージ化されたカーネルのみを作成してきたmodules_installため、直接インストールされたカーネルの動作を正確に覚えていません。Grubはあなたのカーネル/bootを助けなしで見つけます。はい、常にgrub-update新しいカーネルをインストールした後に実行する必要があります。
バハマ

だから私はmake bzimage代わりにやるべきだったmake?私は何をする必要がありますmake cleanし、make bzimage再び?/vmlinuzファイルがルートディレクトリにあるか、Linuxカーネルのソースディレクトリに作成されます意味ですか?
-AnkurVj

1
カーネルが圧縮されているかどうかは問題ではありません。圧縮されていないため、ディスク容量が少し増えます。接頭辞が付いているもの/はすべて絶対パスなので、はい、それはルート内のファイルです。
バハマ

1
回答Yされた@GuyAvrahamモジュールはコンパイルされます(つまり、vmlinuzの一部です)。回答Mされたモジュールは、ロード可能なモジュールとしてコンパイルされます。回答Nされたモジュールはコンパイルされません。make modules_install回答者にのみ適用されMます。
バハマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.