LINUX.ORG.RU

Kernel module symbols


0

0

При сборке к экспортируемым функциям ядра (/proc/ksyms) добавляются строки версии вида _Psmp_fea431f.

Откуда они вылазят, и по какому алгоритму генерируются? Хотя бы общее направление, куда смотреть.

Бывает иногда нужно при сборке в стандартное ядро левого модуля обеспечить идентичность этих символов, не пересобирая все ядро (например, есть закрытый модуль под конкретную версию ядра в дистрибутиве).

Можно, конечно, сделать через objcopy --redefine-sym их все переименовать, но это как-то криво. Нет ли способа прямее?


Module versioning support за это отвечает. Уберешь и не будет тебе генериться такие штуки при сборке ядра.

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

Это я знаю. Как генерируются версии при включенной опции?

Если не совсем ясна суть вопроса из первого поста, извиняйте.

Ситуация: есть ядро из дистрибутива, скажем RHEL3. Пересобирать его я не могу, так как на машинке присутствует железка, драйвер к которой закрыт, например, Infiniband от Topspin (самому не нравится, так получилось). Если я ядро пересоберу, сиволы и версии "поплывут" и драйвер не поставится.

Мне нужно собрать модуль для этого ядра который есть в исходниках, но не входит в основное ядро.

Как это сделать наиболее прямым способом?

Shmuma
() автор топика
Ответ на: комментарий от Shmuma

Так в чем проблема? Собирайте с вашим ядром. Только нужно обратить внимание на установки MODVERSIONS и SMP. Для MODVERSIONS нужен дополнительный заголовок в исходниках.

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

Проблема в том, что даже прописав те же значения SUBLEVEL/EXTRAVERSION в Makefile ядра, модуль не ставится -- ругань на символы, типа:

unresolved symbol register_filesystem_Psmp_XXX

в то же время символ register_filesystem в ядре есть, но с другим значением версии. После переименования символа модуль нормально в ядро грузится и работает.

Shmuma
() автор топика
Ответ на: комментарий от SatanClaus

Стоп, уже ничего не надо. Прогресс не стоит на месте. Похоже в 2.6 уже все само делается. Не удивительно что трудно было чтото найти. В config/modversions.h стоит

#undef CONFIG_MODVERSIONS

Так что нужно просто исходники ядра, сконфигуреные с нужными опциями ну и похоже все должно завеститсь.

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

Спасибо за информацию. Ирония в том, что завязка именно на RHEL3, а там 2.4...

Конфиг для ядра брал из /boot/config-<версия ядра>, судя по содержимому это оно и есть.

Естественно, добавлял параметр для сборки нужного мне модуля в .config. Может быть в этом засада?

Если более предметно, собираю модуль CIFS для RHEL3u5 под ia64.

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