モジュール内に不明なシンボルがありますが、何のシンボルですか?

モジュール内に不明なシンボルがありますが、何のシンボルですか?

ドキュメントに従ってドライバをコンパイルします。しかし、

insmod onebox_wlan_nongpl.ko

、エラーメッセージが表示されます:

insmod: エラー: モジュール onebox_wlan_nongpl.ko を挿入できませんでした: モジュールに不明なシンボルがあります

これはファイルのロード順序が間違っているためだとわかっています.koが、どのモジュールに依存しているかはわかりません。最初にロードする必要があるモジュールのファイルに不明なシンボルが何であるかを知りたいです。

答え1

dmesg で不足しているシンボルを確認するには、 を使用しますdmesg | tail。シンボルが実際にシンボル テーブルにあるかどうかを確認するには、 を使用します。cat /proc/kallsyms | grep <function_name> 同様の問題: https://ubuntuforums.org/showthread.php?t=1360950

答え2

実際に不足しているシンボルを確認するには、 を使用してカーネル ログを調べますdmesg。正確なシンボルが表示されます。カーネル モジュールを自分で作成し、たとえばデバイス マッピング フレームワークなどのフレームワークに依存している場合は、依存関係を最初に読み込む必要があります。次に、私が遭遇した例を示します。

私は書いたデバイスマッパーこれはデバイス マッピング フレームワークに依存します。挿入時に次の処理が行われます。

$ sudo insmod some-module.ko
insmod: ERROR: could not insert module some-module.ko: Unknown symbol in module

カーネルログを検査します。

$ sudo dmesg
[     XX.XXXXXX] some-module.ko: Unknown symbol dm_per_bio_data (err -2)
[     XX.XXXXXX] some-module.ko: Unknown symbol dm_put_device (err -2)
...

ロードされたモジュールを検査します。

$ lsmod | grep dm
<NOTHING>

デバイス マッピング ターゲット ドライバーを挿入します。

$ sudo modprobe dm_mod
$ lsmod | grep dm
dm_mod            184320 0

元のモジュールを挿入すると、エラーは解決されます。

関連情報