LINUX.ORG.RU

Unknown symbol in module. Что делать?

 


0

2

Написал модуль ядра, откомпилировал, попытался загрузить, получил сообщение: Unknown symbol in module

Посмотрел в лог, нашел на какой вызов ругается ядро. Да, есть такой вызов в модуле (и в исходнике и в скомпилированном бинарнике/объектнике). Просмотрел system map ядра, для указанного вызова есть точка входа. Даже не могу теперь представить, в какую теперь сторону смотреть. Предыдущая версия модуля без некоторого добавленного функционала загружалась и работала, и в числе системных вызовов использовала ту же функцию, на которой загрузчик модуля спотыкается в новой версии. Какая то мистика прямо!

make clean перед сборкой модуля делал? А то такое бывает с «грязным» деревом исходников

Pinkbyte ★★★★★ ()

посмотри в каком модуле этот символ и подгрузи. Либо ядро собери с этим символом.

Dark_SavanT ★★★★★ ()
Ответ на: комментарий от Dark_SavanT

посмотри в каком модуле этот символ и подгрузи. Либо ядро собери с этим символом.

Ни в каком он модуле, он в ядре. Он экспортируется из ядра.

Я же написал, что имею старую версию модуля (своего). В нем вызывается функция ядра типа crypto_alloc_ablkcipher. Гружу его, он работает, выполняет свой функционал. Сделал новую версию своего же модуля, расширил так сказать его функционал. Гружу его, получаю, что та же crypto_alloc_ablkcipher не найдена.

zloy_starper ★★ ()
Ответ на: комментарий от zloy_starper

crypto_alloc_ablkcipher

EXPORT_SYMBOL_GPL(crypto_alloc_ablkcipher)

Какая лицензия у твоего модуля, говоришь ?

joy4eg ★★★★★ ()
Ответ на: комментарий от joy4eg

Какая лицензия у твоего модуля, говоришь ?

Интересная мысль. Сразу в голову и непридет. Надо будет проверить.

zloy_starper ★★ ()
Ответ на: комментарий от Pinkbyte

разрабртчики линукса по какой-то причине специально грязные исходники выкладывают?

teod0r ★★★★★ ()

2 joy4eg

Спасибо за дельный совет. Все заработало. Как обычно, невероятное и необъяснимое все-таки оказалось и логичным и объяснимым.

zloy_starper ★★ ()
Ответ на: комментарий от teod0r

Причем здесь разработчики ядра? Или для тебя секрет, что «досборка»(то есть собрал ядро, потом поменял конфиг и без make clean собрал снова) МОЖЕТ вызывать проблемы.

Причем это даже не ядра касается, а практически любого кода на C/C++ сложнее hello world

Pinkbyte ★★★★★ ()
Ответ на: комментарий от Pinkbyte

Причем здесь разработчики ядра? Или для тебя секрет, что «досборка»(то есть собрал ядро, потом поменял конфиг и без make clean собрал снова) МОЖЕТ вызывать проблемы

а что разработчики не могут выкладывать исходники, в которых make clean уже сделано?

teod0r ★★★★★ ()
Ответ на: комментарий от teod0r

Ээээ, они их и выкладывают. Точнее они выкладывают дерево исходников в которых make в общем-то и не делался. То есть чистое.

А вот ТС собирает модуль явно не первый раз(«Предыдущая версия модуля»...) и судя по всему make clean не делал

Pinkbyte ★★★★★ ()
Ответ на: комментарий от Pinkbyte

а зачем тогда после распаковки исходников ядра делать make clean? ещё в некоторых инструкциях пишут, что надо mrproper делать

teod0r ★★★★★ ()
Ответ на: комментарий от teod0r

а зачем тогда после распаковки исходников ядра делать make clean?

wat?

ещё в некоторых инструкциях пишут, что надо mrproper делать

покажи где об этом сказано для ТОЛЬКО ЧТО распакованных исходников ядра

Pinkbyte ★★★★★ ()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от teod0r

Не, для свежих ядрей это делать не надо, лишь при пересборки грязных. Однако, скопировав defconfig, иногда надо make *config делать, не более того.

I-Love-Microsoft ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.