Как генерировать Module.symvers?

Как fschnitt указывает, всесторонний ответ на это, вероятно, был бы главой в системном руководстве по администрированию, таким образом, я попытаюсь только делать набросок фундаментальных понятий. Задайте новые вопросы при необходимости в большем количестве детали об отдельных моментах.

В UNIX все файлы в системе организованы в единственную структуру дерева каталогов (в противоположность Windows, где у Вас есть отдельное дерево каталогов для каждого диска).

Существует "корневой" каталог, который обозначен /, который соответствует главному каталогу на основном диске/разделе (в мире Windows, это было бы C:). Любой другой каталог и файл в системе могут быть достигнуты от корня путем спуска с подкаталогов.

Как можно сделать другие диски/разделы видимыми к системе в такой уникальной древовидной структуре? Вы монтируете их: монтирование диска/раздела на каталоге (например, /media/usb) средства, что главный каталог на том диске/разделе становится видимым как смонтированный каталог. Пример: если я вставляю карту с интерфейсом USB в Windows I, получают новый диск, например, F:; если в Linux я монтирую его на каталоге /media/usb, затем главный каталог на карте с интерфейсом USB (что я видел бы путем открытия F: диск в Windows), будет видимо в Linux как каталог /media/usb. В этом случае, /media/usb каталог называют "точкой монтирования".

Теперь, диски/разделы/и т.д. традиционно названы" (блок) устройствами" в мире UNIX, таким образом, Вы всегда говорите о монтировании устройства на каталоге. Злоупотреблением языком можно просто сказать, "монтируют это устройство" или "размонтирование тот каталог".

Я думаю, что только ответил на Ваш вопрос 1., но это могло запустить Вас для более конкретных вопросов.

Дальнейшее чтение: * http://ultra.pr.erau.edu/~jaffem/tutorial/file_system_basics.htm

14
13.04.2017, 15:36
3 ответа

Module.symvers (ре), сгенерированное когда Вы (ре) модули компиляции. Выполненный make modules, и необходимо получить a Module.symvers файл в корне дерева ядра.

Обратите внимание на это, если Вы только работали make и нет make modules, Вы еще не создали модулей. Символы от самого ядра (vmlinux или один из архитектурно-зависимых форматов изображения), находятся в System.map.

16
27.01.2020, 19:51
  • 1
    за это, @Gilles - я с тех пор также нашел Ответ: файл Module.symvers; и может подтвердить это make modules действительно создает Module.symvers. Спасибо также за разъяснение различия между make и make modules, и отношения к System.map.Удачи! Солярис –  sdaau 17.11.2011, 23:51
  • 2
    Что, если "делают", недоступно на машине? Установка –  bzupnick 25.10.2015, 14:37
  • 3
    @bzupnick это. Это - один из необходимых инструментов для создания модулей ядра Linux. Много программного обеспечения требует, делают для создания. –  Gilles 'SO- stop being evil' 25.10.2015, 14:47
  • 4
    я пытаюсь кросс-скомпилировать LKM от другой машины. Установка вещей на первом поле не возможна. –  bzupnick 25.10.2015, 14:50
  • 5
    @bzupnick, который Вы должны иметь, делает для создания модуля так или иначе. Это все происходит на машине сборки, там не имеет отношения на целевой машине за исключением insmod. –  Gilles 'SO- stop being evil' 25.10.2015, 14:56

для людей, которые нашли этот вопрос, погуглив предупреждение, которое вы получаете при компиляции одного из образцов LKM Дерека Моллоя :, вы можете просто создать пустой с помощью touch Modules.symvers. если ваше ядро ​​не использует версии модов (CRC, используемые операционной системой, чтобы убедиться, что модули соответствуют ядру )и ваш модуль не имеет никаких зависимостей от других модулей, этого будет достаточно, чтобы подавить предупреждение.

WARNING: Symbol version dump./Module.symvers
         is missing; modules will have no dependencies and modversions.

Пустой файл так же хорош, как и файл, сгенерированный gcc, который просто имеет все символы с одинаковым 0x00000000значением CRC в системе без модверсий.

6
27.01.2020, 19:51

В CentOS и, возможно, других вариантах RedHat просто извлеките соответствующий файл для вашего работающего ядра:

zcat /boot/symvers-$(uname -r).gz >./Module.symvers

В Ubuntu и, возможно, в других версиях Debian файлы будут найдены автоматически. Однако, если вам это нужно, файл находится здесь:

/usr/src/linux-headers-$(uname -r)/Module.symvers
3
27.01.2020, 19:51

Теги

Похожие вопросы