Linuxカーネル外部モジュール構築プロセスに関するいくつかの質問

Linuxカーネル外部モジュール構築プロセスに関するいくつかの質問

外部モジュールを構築するためのLinuxカーネルドキュメントページ(https://www.kernel.org/doc/Documentation/kbuild/modules.txt)こう言います。

=== 2. 外部モジュールの構築方法

外部モジュールをビルドするには、ビルドに使用される構成ファイルとヘッダーファイルを含むビルド済みのカーネルが必要です。また、カーネルはモジュールがアクティブな状態で構築する必要があります。 distroカーネルを使用している場合、distroは実行中のカーネルのパッケージを提供します。

別の方法は、「make」ターゲット「modules_prepare」を使用することです。これにより、カーネルに必要な情報が含まれます。このターゲットは、外部モジュールを構築するためにカーネルソースツリーを準備する簡単な方法でのみ存在します。

私の質問は次のとおりです。

  1. 外部モジュールを構築するには事前に構築されたカーネルが必要です。ビルドに使用される構成ファイルとヘッダーファイルを含む使用可能ファイル

「プリビルドカーネル」とは、コンパイルされたバイナリイメージ(通常はvmlinux / vmlinuzという名前)を意味しますか?なぜバイナリイメージが必要なのですか?設定ファイル、ヘッダファイル、コンパイラだけでは十分ではありませんか?

  1. 外部モジュールをビルドするには、事前にビルドされたカーネルを使用できる必要があります。構成ファイルとヘッダーファイルが含まれています。ビルドに使用されます。

ビルドされたカーネルがバイナリイメージを意味する場合、「設定とヘッダファイルを含める」とはどういう意味ですか?ソースツリーに「構成ファイルとヘッダーファイルを含める」必要があることは理解できますが、バイナリの場合、これらのファイルはビルドガイドラインにのみ使用されます。では、「含む」とはどういう意味ですか? 「事前に構築されたカーネル」とは、カーネルの完全なソースツリーを構築することを意味しますか?

  1. また、カーネルは次のようにする必要があります。モジュール構築の有効化

ここで「モジュールを作る」ステップを言及しているのですか、それとも何か違うのですか?

  1. デプロイカーネルを使用する場合パッケージがあるでしょう。実行中のカーネルの場合は、ディストリビューションで提供されます。

私は彼らがここでカーネルビルドプロセス中に使用されるヘッダーと設定ファイルを提供するkernel-develパッケージに言及していると思います。そうですか?

  1. 別の方法は、「make」ターゲット「modules_prepare」を使用することです。これにより、カーネルに必要な情報が含まれます。

どういう意味ですか?これは、ソースディレクトリで "make module_prepare"を実行すると、カーネルバイナリをビルドせずに外部モジュールをビルドできることを意味しますか?

ベストアンサー1

広告1.および2.カーネルイメージはvmlinuxと呼ばれます。はい。ただし、外部モジュールをビルドするときに実際に必要なわけではありません。これは構成およびヘッダーファイルこのカーネルで必要なものを入手してください。

広告3.内部モジュールまたは外部モジュールをビルドするには、そのカーネルでロード可能なモジュールをサポートする必要があります。もちろん、モジュールを構築するにはカーネルを__modulesenabled_に設定する必要があります。

カーネルは、.configカーネルソースツリーからファイルを生成したり、$KBUILD_OUTPUTツリー外部ビルドのパスを生成したりするのに役立つ構成プログラムの1つで構成されています。

ad 4. そのようなパッケージをどこで見つけることができるか、名前がどのように指定されるかはディストリビューションによって異なりますが、一般的にkernel-devel私は何年も自分のカーネルツリーを使ってきたので、実際にはわかりません。

広告5.はい、実際に外部モジュールをコンパイルするためにカーネルバイナリは必要ありませんが、以下の説明は表示されませんでした。

注:「modules_prepare」は、CONFIG_MODVERSIONSが設定されていてもModule.symversを構築しません。したがって、モジュールのバージョン管理が機能するには、カーネル全体のビルドを実行する必要があります。

ほとんどのカーネルはCONFIG_MODVERSIONSを使うと思います。ファイル.configでこれを見ることができます。

$ grep MODVERSIONS .config
CONFIG_MODVERSIONS=y

つまり、ビルドしたモジュールは、ビルドしたカーネルのバージョンと構成でのみ機能します。

したがって、カーネルとカーネルのバージョン用のモジュールを構築できますが、カーネルとカーネルのバージョンがないと実行できません。

これが、デプロイカーネルを構築するカーネル構成とヘッダーファイルをインストールした場合、カーネルソースツリー全体なしでデプロイカーネル用の外部モジュールをビルドできる理由です。

実際には、ほとんどの場合、実行中のシステムのカーネル用の外部モジュールを構築しようとしています。カーネルソースツリーから直接カーネルをビルドする場合は、そのカーネルと一致するカーネル構成ファイルとヘッダーファイルがすでに存在します。

distroカーネルを実行している場合は、distroにこのファイルをインストールする必要があります。

おすすめ記事