web-dev-qa-db-ja.com

Module.symversの生成方法は?

私は最近行きました kernel-source rpm off-system(OpenSuse)を解凍していますか? ;私のマシンで10時間以上かかったので、そこで説明されているプロセスを実行した後、Module.symversどこでも!

「generate Module.symvers」を検索すると、次のようになります。

注: "modules_prepare"はModule.symversをビルドしません。
CONFIG_MODVERSIONSが設定されています。したがって、完全なカーネルビルドは
モジュールのバージョン管理を機能させるために実行されます。
Linuxカーネルのドキュメント:: kbuild:modules.txt

...しかし、実際にはわかりません-前のステップでカーネルがビルドされていません(上記のリンクで説明されていますか?CCが大量の* .oを生成するのに10時間以上かかりました。ファイル、およびLDそれらをリンクするため、何かが構築されている必要があります。しかし、そうである場合、どこにModule.symvers

より明確に言えば、Module.symversを生成するためにどのコマンドを呼び出す必要があるのでしょうか?そんなこと知ってる make prepareは機能しません-しかし、機能するコマンドは何ですか?

14
sdaau

Module.symversは、モジュールを(再)コンパイルすると(再)生成されます。 make modulesを実行すると、カーネルツリーのルートにModule.symversファイルが作成されます。

makeのみを実行し、make modulesを実行しなかった場合、まだモジュールをビルドしていないことに注意してください。カーネル自体のシンボル(vmlinuxまたはアーキテクチャに依存するイメージ形式の1つ)はSystem.mapにあります。

derek MolloyのサンプルLKMの1つをコンパイルするときに表示される警告をグーグル検索してこの質問を見つけた人は、touch Modules.symversを使用して空の質問を作成できます。カーネルがmodversions(モジュールがカーネルと一致することを保証するためにオペレーティングシステムが使用するCRC)を使用せず、モジュールが他のモジュールに依存しない場合、これは警告を抑制するのに十分です。

WARNING: Symbol version dump ./Module.symvers
         is missing; modules will have no dependencies and modversions.

空のファイルは、gccによって生成されたものと同じように、modversionsのないシステム上で同じ0x00000000 CRC値を持つすべてのシンボルを持っています。

4
jcomeau_ictx

CentOS、およびおそらく他のRedHatバリアントでは、実行中のカーネルに対応するファイルを抽出するだけです。

zcat /boot/symvers-$(uname -r).gz > ./Module.symvers

Ubuntuおよびおそらく他のDebianの亜種では、ファイルが自動的に検出されます。ただし、必要な場合は、ファイルは次のとおりです。

/usr/src/linux-headers-$(uname -r)/Module.symvers
2
Id2ndR