Неизвестный символ в модуле, но какой символ?

Неизвестный символ в модуле, но какой символ?

Я компилирую драйвер, следуя документации. Но когда я пытаюсь загрузить их через

insmod onebox_wlan_nongpl.ko

, я получаю сообщение об ошибке:

insmod: Ошибка: не удалось вставить модуль onebox_wlan_nongpl.ko: Неизвестный символ в модуле

Я знаю, что это из-за неправильного порядка загрузки .koфайлов, но мне не сообщается, от какого модуля это зависит. Я хотел бы узнать, какой символ неизвестен файлу модуля, который я должен загрузить первым.

решение1

Вы можете просто проверить отсутствующие символы в dmesg с помощью dmesg | tail. Если вы хотите проверить, есть ли символы на самом деле в вашей таблице символов, проверьте с помощью cat /proc/kallsyms | grep <function_name> Similar issue: 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

Теперь вставьте оригинальный модуль, и ошибка будет устранена.

Связанный контент