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


14

最近、カーネルソースのrpmをシステム外(OpenSuse)で解凍しましたか?; マシンで10時間以上かかったので、そこで説明されているプロセスを実行した後、Module.symversどこにも見つからないことに驚いたことを想像してください。

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

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

...しかし、私は実際にそれを取得しません-前のステップでカーネルが構築されなかった(上記のリンクで説明されていますか?ファイル、およびそれらをリンクするLDであるため、何かが構築されている必要がありModule.symversます。

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


FYI、openSUSEの上で、あなたが得ることModule.symversによってzypper install kernel-source、および他のLinuxディストリビューションに似ています。ファイルはにありlib/modules/xxx/buildます。
シュルティス少佐

回答:


16

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

実行しただけで実行makeしないmake modules場合は、まだモジュールをビルドしていないことに注意してください。カーネル自体のシンボル(vmlinuxまたはアーキテクチャ依存の画像フォーマットの1つ)はにありSystem.mapます。


@Gillesに感謝します。それ以来、Answer:Module.symvers fileも見つけました。そして、それmake modulesが実際に作成することを確認できますModule.symversmakeとの違いmake modules、およびとの関係を明確にしてくれてありがとうSystem.map。乾杯!
sdaau

マシンで「make」が使用できない場合はどうなりますか?
bzupnick

3
@bzupnickをインストールします。Linuxカーネルモジュールを構築するために必要なツールの1つです。多くのソフトウェアをビルドするにはmakeが必要です。
ジル「SO-悪であるのをやめる」

別のマシンからLKMをクロスコンパイルしようとしています。最初のボックスに物をインストールすることはできません。
bzupnick

@bzupnickとにかくモジュールをビルドするにはmakeが必要です。それはすべてビルドマシン上で発生しinsmodます。ターゲットマシン上で実行することは何もありません。
ジル「SO-悪であるのをやめる」

3

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によって生成されたファイルと同じくらい良いです0x00000000。gccはmodversionのないシステム上で、同じCRC値を持つすべてのシンボルを持っています。


1

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

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

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

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

linux-headers-$(uname -r)フォルダーが見つかりません
キングストーン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.