ドキュメントに従ってドライバをコンパイルします。しかし、
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
元のモジュールを挿入すると、エラーは解決されます。