カーネルコンパイルにおけるこれらの用語の違いは何ですか

カーネルコンパイルにおけるこれらの用語の違いは何ですか

条件は何ですか?

make, make bzImage, makemodules, makeinstall, makemodules_install は互いに関連しています。

私が見たカーネルチュートリアルでは、すべてのmake bzImage、makemodules、makeinstall、makemodules_installコマンドを使用して新しいカーネルをコンパイルしてインストールしました。もう1つは、make、make install、およびmake module_installコマンドのみを使用します。では、違いは何ですか?

ベストアンサー1

時間の経過とともに、Linuxカーネルのコンパイルプロセス自体がさらに進化しました。より複雑になりましたが、より簡素化されました。カーネルソースディレクトリから実行すると、make helpすべてのターゲットのリストmakeと各ターゲットの簡単な説明が表示されます。

現在の5.xカーネルシリーズでは、コマンドmakeとコマンドmake allは同じです。両方とも、アーキテクチャ固有のデフォルトターゲットリストを実行します。

x86ハードウェアアーキテクチャでは、基本リストには次のものが含まれます。

  • make vmlinuxベアカーネルのmake bzImage構築
  • make modulesカーネルモジュールの構築
  • make bzImage起動可能な圧縮カーネルイメージファイルを作成します。

上記のすべての操作は、追加の権限なしで一般ユーザーとして実行できます。

一方、存在する場合はormake installが使用されます~/bin/installkernel/sbin/installkernelお使いのシステムは、該当~/bin/installkernelする場合はsudoこれまたは同様のものを使用できますが、システムは/sbin/installkernel通常、既にrootアクセス権を持っていると仮定するように書かれています。

同様にmake modules_install、新しいカーネルバージョンのモジュールが/lib/modules/<kernel_version>/ディレクトリツリーにコピーされるため、正常に実行するにはルートアクセスが必要です。

ベストプラクティスは、特定の必要なしにルートで長く複雑なプロセス(カーネルコンパイルなど)を実行しないため、現在の最小カーネルコンパイルプロセスは次のとおりです。

  • カーネルを一般ユーザーとして構成
  • 一般ユーザーとして実行makeまたは実行make all
  • sudo make modules_installカーネルモジュールをインストールするには実行してください。
  • sudo make install実際のカーネルをインストールするには実行してください。/sbin/installkernelinitramfsファイルの自動ビルドなどの他の操作がトリガーされ、新しいカーネルモジュールがすでにインストールされている場合は、これらの他の操作がより正常に実行される可能性があるため、最後にこれを実行することをお勧めします。

ただし、必要に応じてカスタムカーネルを構築するよりもカーネル開発を行う場合は、より細かいプロセスを使用できます。たとえば、カーネルモジュールを開発している場合は、次make modulesのように実行できます。別の手順を実行すると、間違いによって失敗したかどうかを簡単に確認し、エラーをすばやく修正できます。エラーが修正されると、make modules前の手順が正常に完了したため、再実行に進むことができます。

同様に、以前のカーネルブートプロセスを使用している開発者は、他のシステム(巧妙なACPIテーブルセットなど)でテストするためにbzImageが必要になる可能性があり、モジュールにはまったく気にしない可能性があります。

おすすめ記事