web-dev-qa-db-ja.com

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

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

buntuのサイト で説明されている手順は、fakerootdpkgmake-kpkg、いくつかのinitramfs、および機能するが単純に機能する他の恐ろしいもので多くの作業を行います何が起こっているのか理解するのに役立ちません。

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

上から...

  • makeはカーネルイメージをコンパイルしてリンクします。これは、vmlinuzという名前の単一のファイルです。
  • make modulesは、カーネル構成中にユーザーがMに回答した質問ごとに個別のファイルをコンパイルします。オブジェクトコードは、新しく構築されたカーネルに対してリンクされます。 (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つで利用できます。例外はありますが、最近では非常にまれです。

自分でカーネルを構築することはお勧めしませんが、実際にそれを行うことをお勧めします。カーネルをゼロから構築することは、そこでカーネルがどのように機能するかを学ぶ上で非常に貴重な方法だと思います。おそらく、ある日あなたがwillを必要とする例外であるためです。しかし、それはまた一般的にカーネルとブートプロセスについて多くを教えます。あなたはそれをしたことでより良い人になるでしょう。

35
bahamat