Module.symversファイル生成のロジックは何ですか?

Module.symversファイル生成のロジックは何ですか?

私が知る限りモジュール.symversファイルはエクスポートされたシンボルのリストを提供します。モジュール別ライセンスとともに、これらのファイルはCRC(オプション)に従ってエクスポートできます。他のモジュールは目的を達成するためにこれらのシンボルに依存する可能性があり、私のモジュールがいくつかのシンボルに依存している場合は確かに論理的です。モジュールX、これモジュールX少なくとも建設されるべきだから定義シンボルが必要です。モジュール.symversだからそれは完全なチェックで動作します。そうですか?

いくつかのシンボルがなぜ使用されるのか理解するのは難しいです。明らかにdebugfs_create_u32エクスポートされていないモジュールに依存しません。たとえば、関数を使用したいと思います。存在しなければならない唯一の依存関係ですが、CONFIG_DEBUG_FSこのオプションを有効にすると、宣言されたシンボルの小さな部分のみをエクスポートできます#include <linux/debugfs.h>。そのため、モジュールをコンパイルしようとするたびに、未定義のシンボルに対してMODPOSTエラーが発生します。私の解決策は、debugfs_create_u32コード内で実際にシンボルを使用する任意のモジュールを見つけてカーネルをコンパイルすることでした。モジュールには定義がなく、debugfs_create_u32モジュールの機能を使用せず、実際には必要ありません。このモジュールが私に役立つ唯一のことは、次の行を追加するだけです。モジュール.symversファイルとすべてが魔法のように動作し始めました。私はシンボルに似た問題があり、モジュールがi8253_lock必要ではなく、ほしいだけpcspkrでしたが、i8253_lockそれを取得するにはpcspkr何らかの理由でコンパイルする必要がありました。

ここで重要なことを見逃しているのが確かであまりにも混乱しているので、上記の状況をどのように理解すべきか、世代の論理は何なのかについての説明をお願いします。モジュール.symvers

ベストアンサー1

まだこの問題で苦労しているのか分からない。少し遅れていることはわかりましたが、今夜も同じ問題が発生しました。犯人はカーネル構成の次のオプションです。

CONFIG_TRIM_UNUSED_KSYMS

https://cateee.net/lkddb/web-lkddb/TRIM_UNUSED_KSYMS.html

このオプションが有効な場合は無効にします。

お役に立てば幸いです。

おすすめ記事