Module.symversを生成する方法は?

Module.symversを生成する方法は?

私は最近経験したカーネルソースコードrpmをシステム(OpenSuse)の外部で解凍しますか?;私のコンピュータで10時間以上費やしましたが、そこに説明されているプロセスを経て、どこにもいないことを発見して驚きましたModule.symvers

「モジュール.symversの生成」を検索すると、次の結果が表示されます。

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

…でも本当に理解できません。前のステップでカーネルが構築されていませんでした(上記のリンクに記載されていますか?CCで複数の* .oファイルとLDを作成するのに10時間以上かかりました)。彼らとつながっているので、何かが構築されたでしょう。それではどこにありますかModule.symvers

より具体的には、Module.symversを生成するには正確に何を呼び出す必要がありますか?私はこれがうまくmake prepareいかないことを知っています。しかし、動作するコマンドは何ですか?

答え1

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

make実行せずに単に実行した場合は、make modulesモジュールが構築されていません。カーネル自体(vmlinuxまたはアーキテクチャによるイメージ形式のいずれか)の記号はSystem.map

答え2

Derek Molloyの例LKMをコンパイルしたときに得られた警告を検索してそれを見つけた場合:touch Modules.symversカーネルはmodversionを使用せず(オペレーティングシステムはモジュールがカーネルと一致することを確認するためにCRCを使用します)。他のモジュールへの依存関係がなければ、警告を抑制するのに十分です。

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

0x00000000空のファイルは、modversionのないシステムで同じCRC値を持つシンボルのみを含むgccで生成されたファイルと同じくらい良いです。

答え3

CentOSやその他のRedHatバリアントでは、実行中のカーネルに対応するファイルを抽出してください。

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

Ubuntuやその他のDebianバリアントでは、このファイルが自動的に検出されます。ただし、必要に応じてファイルは次のようになります。

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

関連情報