私は最近行きました 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
は機能しません-しかし、機能するコマンドは何ですか?
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値を持つすべてのシンボルを持っています。
CentOS、およびおそらく他のRedHatバリアントでは、実行中のカーネルに対応するファイルを抽出するだけです。
zcat /boot/symvers-$(uname -r).gz > ./Module.symvers
Ubuntuおよびおそらく他のDebianの亜種では、ファイルが自動的に検出されます。ただし、必要な場合は、ファイルは次のとおりです。
/usr/src/linux-headers-$(uname -r)/Module.symvers