外部モジュールを構築するためのLinuxカーネルのドキュメントページ( https://www.kernel.org/doc/Documentation/kbuild/modules.txt )は次のように述べています。
=== 2。外部モジュールを構築する方法
外部モジュールをビルドするには、ビルドで使用される構成ファイルとヘッダーファイルを含むビルド済みのカーネルが利用可能である必要があります。また、カーネルはモジュールを有効にして構築されている必要があります。ディストリビューションカーネルを使用している場合は、ディストリビューションによって提供される、実行しているカーネルのパッケージがあります。
別の方法は、「make」ターゲット「modules_prepare」を使用することです。これにより、カーネルに必要な情報が含まれていることを確認できます。ターゲットは、外部モジュールを構築するためのカーネルソースツリーを準備する簡単な方法としてのみ存在します。
私の質問は次のとおりです。
外部モジュールをビルドするには、ビルド済みのカーネルが必要ビルドで使用される構成ファイルとヘッダーファイルを含むものが利用可能です
「ビルド済みカーネル」とは、コンパイルされたバイナリイメージ(一般にvmlinux/vmlinuzという名前)を意味しますか?なぜバイナリイメージが正確に必要なのですか?構成ファイル、ヘッダーファイル、コンパイラで十分ではありませんか?
外部モジュールをビルドするには、ビルド済みのカーネルを使用できる必要があります構成ファイルとヘッダーファイルを含むビルドで使用されます。
ビルド済みのカーネルでバイナリイメージを意味する場合、「構成ファイルとヘッダーファイルを含む」の意味は何ですか? 「構成ファイルとヘッダーファイルを含める」必要があるソースツリーは理解できますが、バイナリの場合、これらのファイルは命令を生成するために使用されますか?では、「含む」の意味は何ですか? 「ビルド済みカーネル」とは、カーネルがビルドされたソースツリー全体を意味しますか?
また、カーネルはモジュールを有効にしてビルドである必要があります。
彼らはここで「モジュールを作る」ステップを参照していますか、それとも何か違うのですか?
ディストリビューションカーネルを使用している場合、パッケージがありますディストリビューションによって提供されている実行中のカーネル用です。
ここでは、カーネル構築プロセスで使用されたヘッダーファイルと構成ファイルを提供するkernel-develパッケージを参照していると思います。あれは正しいですか?
別の方法は、「make」ターゲット「modules_prepare」を使用することです。これにより、カーネルに必要な情報が含まれていることを確認できます。
これはどういう意味ですか?これは、ソースディレクトリで「makemodules_prepare」を実行した場合に外部モジュールをビルドできるようにするために、ビルドされたカーネルバイナリを用意する必要がないことを意味しますか?
ad 1.および2.カーネルイメージはvmlinuxと呼ばれます、そうですが、外部モジュールを構築するときに実際に必要なものではありません。必要なのは、このカーネルの構成ファイルとヘッダーファイルです。
ad 3.内部または外部のモジュールを構築するには、このカーネルでロード可能なモジュールのサポートが必要です。もちろん、モジュールを構築する必要があるため、カーネルは__modulesenabled_で構成する必要があります。
カーネルは、カーネルソースツリーまたは.config
パスで、ツリー外ビルド用に$KBUILD_OUTPUT
ファイルを作成するのに役立つ構成プログラムの1つによって構成されます。
ad 4.そのようなパッケージを見つける場所や名前の付け方はディストリビューションによって異なりますが、しばしばkernel-devel
と呼ばれると思います。 自分のカーネルツリーを何年も使用した原因は実際にはわかりません。
ad 5.はい、外部モジュールをコンパイルするために実際にはカーネルバイナリは必要ありませんが、以下の注記を抑制しました
注:「modules_prepare」は、CONFIG_MODVERSIONSが設定されている場合でも、Module.symversをビルドしません。したがって、モジュールのバージョン管理を機能させるには、完全なカーネルビルドを実行する必要があります。
ほとんどのカーネルはCONFIG_MODVERSIONSを使用していると思います。これは、.config
ファイルで次のように確認できます。
$ grep MODVERSIONS .config
CONFIG_MODVERSIONS=y
つまり、ビルドしたモジュールは、ビルドしたカーネルのバージョンと構成でのみ機能します。
したがって、そのカーネルとカーネルバージョンのモジュールを作成することはできますが、そのカーネルとカーネルバージョンがないと実行できません。
そのため、完全なカーネルソースツリーがなくても、ディストリビューションカーネルの外部モジュールを構築できます。カーネル構成ファイルとヘッダーファイルをインストールすると、そのディストリビューションカーネルが構築されます。
実際、ほとんどの場合、システムを実行するカーネルの外部モジュールを構築したいだけです。カーネルソースツリーからカーネルを自分で構築した場合は、そのカーネルに一致するカーネル構成ファイルとヘッダーファイルが既に存在します。
ディストリビューションカーネルを実行する場合は、ディストリビューションからそのファイルをインストールする必要があります。