Linuxカーネルビルドプロセスのすべての段階で何が起こりますか?

Linuxカーネルビルドプロセスのすべての段階で何が起こりますか?

私はカスタムカーネルを構築し、これらのカーネルを使ってUbuntuを起動する方法についてのチュートリアルをたくさん読んでいます.を理解していません。

上記のプロセスUbuntuのウェブサイト多くの作業fakeroot、いくつかのinitramfs、その他の恐ろしい作業を行ってきましたが、うまくいきましたが、dpkg何がmake-kpkg起こっているのか理解するのにまったく役に立ちませんでした。

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

答え1

最初から...

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

利用可能なカーネルのリストに追加するのはブートローダの責任です。すべてのブートローダは異なりますが、grubx86とamd64で最も一般的なので、これについて説明します。実は本当に簡単です。 Grubは、動作するコアのように見える/ものを/boot見つけて追加します。/lib/modulesはい、それはあまりにも単純化されています。

Ubuntuドキュメントの追加の「怖いもの」は、パッケージを作成するdeb追加のエントリです。あなた自身よりも多くのためにそれをやっているなら、それを包むのが最善です。時間が経つと切り替わります。

カーネルとモジュールの構築は、必要な人(カーネル開発者など)が通常モジュールのみを変更するため、別々に行われます。変更を適用し、再構築し、モジュールをインストールできます。これにより、1日20回実行する必要があるため、時間を節約できます。 1つのコマンドでのみ更新されませんmake everything。代わりに、あなたは実行しますmake && make modules && make install && make modules_install 文書に記載されているように。ビルドプロセスは、あなたではなくカーネル開発者に役立ちます。そうする必要があります。

実際、カーネル開発者やディストリビューションパッケージャ以外に、誰もカーネルをコンパイルする必要はほとんどありません。ほとんどすべての場合、あなたが望むカーネル機能はあなたのために構築されており、事前パッケージされたカーネルの1つで利用可能です。例外がありますが、最近ではごくまれです。

私はあなたが自分のカーネルを構築するのを妨げるのではなく、実際にそうすることをお勧めします。私は最初からカーネルを構築することがカーネルのしくみを理解する上で非常に貴重な練習だと思います。部分的にはいつか〜する例外が必要です。しかし、カーネルとブートプロセスについても多くのことを教えてくれます。このことをしたら、あなたはより良い人になります。

関連情報