外部モジュールを構築するためのLinuxカーネルドキュメントページ(https://www.kernel.org/doc/Documentation/kbuild/modules.txt)こう言います。
=== 2. 外部モジュールの構築方法
外部モジュールをビルドするには、ビルドに使用される構成ファイルとヘッダーファイルを含むビルド済みのカーネルが必要です。また、カーネルはモジュールがアクティブな状態で構築する必要があります。 distroカーネルを使用している場合、distroは実行中のカーネルのパッケージを提供します。
別の方法は、「make」ターゲット「modules_prepare」を使用することです。これにより、カーネルに必要な情報が含まれます。このターゲットは、外部モジュールを構築するためにカーネルソースツリーを準備する簡単な方法でのみ存在します。
私の質問は次のとおりです。
外部モジュールを構築するには事前に構築されたカーネルが必要です。ビルドに使用される構成ファイルとヘッダーファイルを含む使用可能ファイル
「プリビルドカーネル」とは、コンパイルされたバイナリイメージ(通常はvmlinux / vmlinuzという名前)を意味しますか?なぜバイナリイメージが必要なのですか?設定ファイル、ヘッダファイル、コンパイラだけでは十分ではありませんか?
外部モジュールをビルドするには、事前にビルドされたカーネルを使用できる必要があります。構成ファイルとヘッダーファイルが含まれています。ビルドに使用されます。
ビルドされたカーネルがバイナリイメージを意味する場合、「設定とヘッダファイルを含める」とはどういう意味ですか?ソースツリーに「構成ファイルとヘッダーファイルを含める」必要があることは理解できますが、バイナリの場合、これらのファイルはビルドガイドラインにのみ使用されます。では、「含む」とはどういう意味ですか? 「事前に構築されたカーネル」とは、カーネルの完全なソースツリーを構築することを意味しますか?
また、カーネルは次のようにする必要があります。モジュール構築の有効化。
ここで「モジュールを作る」ステップを言及しているのですか、それとも何か違うのですか?
デプロイカーネルを使用する場合パッケージがあるでしょう。実行中のカーネルの場合は、ディストリビューションで提供されます。
私は彼らがここでカーネルビルドプロセス中に使用されるヘッダーと設定ファイルを提供するkernel-develパッケージに言及していると思います。そうですか?
別の方法は、「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にこのファイルをインストールする必要があります。