
私は最近経験したカーネルソースコード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