Я недавно прошел Распаковка rpm-ядра вне системы (OpenSuse)? ; и, поскольку на моей машине прошло> 10 часов, представьте мое удивление, что после описанного там процесса я Module.symvers
нигде не нахожу !
Когда я ищу «генерировать Module.symvers», я получаю это:
ПРИМЕЧАНИЕ: «modules_prepare» не будет собирать Module.symvers, даже если установлен
CONFIG_MODVERSIONS; следовательно, полная сборка ядра должна быть
выполнена, чтобы заставить работу модулей работать.
( Документация ядра Linux :: kbuild: modules.txt )
... но я не совсем понял - разве ядро не было собрано на предыдущем шаге (описанном в приведенной выше ссылке? Я уверен, что для создания целой связки * .o понадобилось> 10 часов) файлы, и LD, чтобы связать их, так что что-то должно быть построено. Но если так, то где же тогда Module.symvers
?
В более явных терминах, какую именно команду я должен вызывать для создания Module.symvers? я знаю этоmake prepare
это не сработает, но что это за команда?
источник
Module.symvers
наzypper install kernel-source
, и похоже на другой дистрибутиве. Файл находится вlib/modules/xxx/build
.Ответы:
Module.symvers
Является (вос) генерируется при (перо) модули компиляции. Запуститеmake modules
, и вы должны получитьModule.symvers
файл в корне дерева ядра.Обратите внимание, что если вы только работали
make
и не работалиmake modules
, вы еще не создали ни одного модуля. Символы из самого ядра (vmlinux
или одного из архитектурно-зависимых форматов изображений) находятся вSystem.map
.источник
make modules
действительно создаетModule.symvers
. Спасибо также за разъяснение различий междуmake
иmake modules
и отношениямиSystem.map
. Ура!insmod
.для людей, которые нашли этот вопрос, прибегая к помощи предупреждения, которое вы получаете при компиляции одного из образцов LKM Дерека Моллоя: вы можете просто сделать пустой с помощью
touch Modules.symvers
. если ваше ядро не использует модверсии (CRC, используемые операционной системой для обеспечения соответствия модулей ядру) и ваш модуль не имеет каких-либо зависимостей от других модулей, этого будет достаточно для подавления предупреждения.пустой файл так же хорош, как и файл, сгенерированный gcc, который просто содержит символы с одинаковым
0x00000000
значением CRC в системе без модификаций.источник
В CentOS и, возможно, в других вариантах RedHat просто распакуйте соответствующий файл для вашего работающего ядра:
В Ubuntu и, возможно, в других вариантах Debian файл будет найден автоматически. Однако, если вам это нужно, файл находится здесь:
источник
linux-headers-$(uname -r)
папку