Depmod обрабатывает описания зависимостей для загружаемых модулей ядра.
конспект
depmod [-aA] [-ehnqrsuvV] [-C файл конфигурации ] [-F kernelsyms ] [-b каталог на основе ] [ принудительная_версия ] depmod [- enqrsuv] [-F kernelsyms ] module1.o module2.o …
Описание
Утилиты depmod и modprobe предназначены для того, чтобы сделать модульное ядро Linux управляемым для всех пользователей, администраторов и сопровождающих.
Depmod создает файл зависимостей, подобный Makefile, на основе символов, которые он находит в наборе модулей, указанных в командной строке, или в каталогах, указанных в файле конфигурации. Этот файл зависимостей позже используется modprobe для автоматической загрузки нужного модуля или стека модулей.
Обычно depmod используется для добавления строки
/sbin/depmod -a
где-то в rc-файлах в /etc/rc.d , так что правильные зависимости модуля будут доступны сразу после загрузки системы. Обратите внимание, что опция -a теперь является необязательной. Для загрузки может подойти опция -q , так как это заставляет depmod молчать о неразрешенных символах.
Также возможно создать файл зависимости сразу после компиляции нового ядра. Если вы выполните “ depmod -a 2.2.99 “, когда вы скомпилировали ядро 2.2.99 и его модули в первый раз, при этом все еще работаете, например. 2.2.98, файл будет создан в правильном месте. Однако в этом случае зависимости от ядра не будут гарантированно правильными. См. Параметры -F , -C и -b выше для получения дополнительной информации об этом.
При построении взаимосвязи между модулями и символами, экспортируемыми другими модулями, depmod не учитывает состояние GPL модулей и экспортируемых символов. То есть depmod не будет отмечать ошибку, если модуль без лицензии, совместимой с GPL, ссылается на символ только GPL (EXPORT_SYMBOL_GPL в ядре). Однако insmod откажется разрешать символы GPL только для модулей не-GPL, поэтому фактическая загрузка не удастся.
Опции
-a – все
Поиск модулей во всех каталогах, указанных в (необязательном) файле конфигурации /etc/modules.conf .
-A – быстрый
Сравните временные метки файлов и, если необходимо, действуйте как depmod -a . Эта опция обновляет файл зависимостей, только если что-то изменилось.
-e – errsyms
Показать все неразрешенные символы для каждого модуля.
-h – помощь
Показать сводку опций и сразу выйти.
-n – показать
Записать файл зависимости на стандартный вывод, а не в дерево /lib/modules .
-q – тихо
Скажите depmod, чтобы он молчал и не жаловался на пропущенные символы.
-r – корень
Некоторые пользователи компилируют модули под ИД пользователя без полномочий root, а затем устанавливают модули как root. Этот процесс может оставить модули, принадлежащие ИД пользователя без полномочий root, даже если каталог модулей принадлежит пользователю root. Если идентификатор пользователя без полномочий root скомпрометирован, злоумышленник может перезаписать существующие модули, принадлежащие этому идентификатору пользователя, и использовать это воздействие для начальной загрузки до доступа root.
По умолчанию modutils отклоняет попытки использовать модуль, который не принадлежит root. Указание -r подавит ошибку и позволит root загружать модули, которые не принадлежат root.
Использование -r является серьезной угрозой безопасности и не рекомендуется.
-s – системный журнал
Пишите все сообщения об ошибках через демон syslog вместо stderr.
<Сильного> -u – нерешенные ошибки
depmod 2.4 не устанавливает код возврата при наличии неразрешенных символов. В некоторых дистрибутивах требуется ненулевой код возврата в modutils 2.4, но это изменение может вызвать проблемы у пользователей, которые ожидают старого поведения. Если вы хотите получить ненулевой код возврата в depmod 2.4, укажите -u . depmod 2.5 автоматически игнорирует флаг -u и всегда дает ненулевой код возврата для неразрешенных символов.
-v – многословный
Показать название каждого модуля в процессе его обработки.
-V – версия
Показать версию depmod .
Управление дистрибутивами
Следующие параметры полезны для людей, управляющих дистрибутивами:
-b BaseDirectory – имя_базовой_папки BaseDirectory
Если дерево каталогов/lib/modules , содержащее поддеревья модулей, перемещено куда-то еще для обработки модулей для другой среды, опция -b сообщает depmod где найти перемещенное изображение дерева /lib/modules . Ссылки на файл в созданном выходном файле depmod, modules.dep , не будут содержать путь basedirectory . Это означает, что при перемещении дерева файлов из basedirectory/lib/modules в /lib/modules в окончательном выпуске все ссылки будут правильными.
-C CONFIGFILE – конфигурации CONFIGFILE
Используйте файл configfile вместо /etc/modules.conf . Переменная среды MODULECONF также может использоваться для выбора другого файла конфигурации из /etc/modules.conf (или /etc/conf.modules > по умолчанию >. EM> (устаревшее)).
Когда установлена переменная среды UNAME_MACHINE , modutils будет использовать ее значение вместо машинного поля из системного вызова uname (). Это в основном используется, когда вы компилируете 64-битные модули в 32-битном пользовательском пространстве или наоборот, установите UNAME_MACHINE в качестве типа создаваемых модулей. Текущие модули не поддерживают режим полного кросс-сборки для модулей, он ограничен выбором между 32- и 64-битными версиями архитектуры хоста.
-F kernelsyms , – файловые символы kernelsyms
При создании файлов зависимостей для ядра, отличного от текущего запущенного ядра, важно, чтобы depmod использовал правильный набор символов ядра для разрешения ссылок на ядра в каждом модуле. Эти символы могут быть либо копией System.map из другого ядра, либо копией вывода из /proc/ksyms . Если в вашем ядре используются версионные символы, лучше всего использовать копию вывода /proc/ksyms , поскольку этот файл содержит символьные версии символов ядра. Однако вы можете использовать System.map даже с версионными символами.
конфигурация
Поведение depmod и modprobe можно настроить с помощью (необязательного) файла конфигурации /etc/modules.conf . См. modprobe (8) и modules.conf (5) для полного описания.
стратегия
Каждый раз, когда вы компилируете новое ядро, команда “ make modules_install ” создаст новый каталог, но не изменит значение по умолчанию.
Когда вы получаете модуль, не связанный с дистрибутивом ядра, вы должны поместить его в один из независимых от версии каталогов в /lib/modules .
Это стратегия по умолчанию, которую можно изменить в /etc/modules.conf .
Используйте команду man (% man ), чтобы увидеть, как команда используется на вашем конкретном компьютере.