Skip to main content

Все о Linux / Unix Command: insmod

How to use lsmod, insmod, and rmmod commands in Linux (Июнь 2026)

How to use lsmod, insmod, and rmmod commands in Linux (Июнь 2026)
Anonim

Команда Linux / Unix insmod устанавливает загружаемый модуль в запущенном ядре.insmod пытается связать модуль с работающим ядром, разрешив все символы из экспортированной таблицы символов ядра.

Если имя файла модуля предоставляется без каталогов или расширений,insmod будет искать модуль в некоторых общих каталогах по умолчанию. Переменная средыMODPATH может использоваться для переопределения этого значения по умолчанию. Если файл конфигурации модуля, такой как/etc/modules.conf существует, он будет переопределять пути, определенные вMODPATH.

Переменная средыMODULECONF также может использоваться для выбора другого конфигурационного файла по умолчанию/etc/modules.conf (или же/etc/conf.modules (Устаревшее)). Эта переменная среды переопределит все вышеприведенные определения.

Когда переменная средыUNAME_MACHINE , modutils будет использовать свое значение вместо машинного поля из unyscame () syscall. Это в основном используется при компиляции 64-битных модулей в 32-разрядном пользовательском пространстве или наоборот, в набореUNAME_MACHINE к типу модулей. Текущие modutils не поддерживают режим полной перекрестной сборки для модулей, он ограничен выбором между 32 и 64-битными версиями архитектуры хоста.

Опции

-e persist_name , --persist= persist_name

Указывает, где любые постоянные данные для модуля считываются с загрузки и записываются, когда эта копия модуля выгружается. Эта опция игнорируется, если модуль не имеет постоянных данных. Постоянные данные считываются толькоinsmod если эта опция присутствует, по умолчаниюinsmod не обрабатывает постоянные данные.

Как сокращенная форма,-e "" (пустая строка) интерпретируетсяinsmod как значениеpersistdir как определено вmodules.conf, за которым следует имя файла модуля относительно пути поиска модуля, в котором он был найден, минус любые конечные «.gz», «.o» или «.mod». Еслиmodules.conf указывает "persistdir ="(т.е.persistdir это пустое поле), тогда эта сокращенная форма молча игнорируется. (Увидетьmodules.conf (5).)

-f, --force

Попытайтесь загрузить модуль, даже если версия запущенного ядра и версия ядра, для которого был скомпилирован модуль, не совпадают. Это только отменяет проверку версии ядра, она не влияет на проверки имени символа. Если имена символов в модуле не совпадают с ядром, тогда нет возможности принудительноinsmod для загрузки модуля.

-час, --Помогите

Покажите сводку опций и немедленно выйдите.

-k, --Автоматическая очистка

Установите флаг автоматической очистки модуля. Этот флаг будет использоватьсяKerneld(8) удалить модули, которые не использовались в течение определенного периода времени - обычно одна минута.

-L, --замок

использованиестадо(2) для предотвращения одновременной загрузки одного и того же модуля.

-m, --карта

Выведите карту нагрузки на stdout, что упростит отладку модуля в случае паники ядра.

-n, --нет загрузки

Dummy run, делать все, кроме загрузки модуля в ядро. По просьбе-m или же, запустите файл карты или blob. Поскольку модуль не загружен, реальный адрес загрузки ядра неизвестен, поэтому файл карты и blob основан на произвольном адресе загрузки 0x12340000.

module_name , --название= module_name

Явным образом назовите модуль, а не выведите имя из базового имени исходного файла объекта.

blob_name , --blob= blob_name

Сохраните двоичный объект в blob_name , Результатом является двоичный blob (нет заголовков ELF), показывающий точно, что загружается в ядро ​​после манипуляции и перемещения раздела. вариант-m рекомендуется получить карту объекта.

-п, --probe

Проверьте модуль, чтобы убедиться, что он может быть успешно загружен. Это включает в себя поиск объектного файла в пути к модулю, проверку номеров версий и разрешение символов. Он не проверяет перемещение и не создает файл карты или blob.

префикс , --префикс= префикс

Эта опция может использоваться с версиями модулей для ядра SMP или bigmem, поскольку такие модули имеют дополнительный префикс, добавленный в их имена символов. Если ядро ​​было построено с символьными версиями, тогдаinsmod автоматически извлекает префикс из определения «get_module_symbol» или «inter_module_get», один из которых должен существовать в любом ядре, которое поддерживает модули. Если ядро ​​не имеет версий символов, но модуль был построен с версиями символов, то пользователь должен предоставить.

-q, --тихо

Не печатайте список любых неразрешенных символов. Не жалуйтесь на несоответствие версий. Проблема будет отражена только в статусе выходаinsmod.

, --root

Некоторые пользователи компилируют модули под именем пользователя без полномочий root, а затем устанавливают модули как root. Этот процесс может оставить модули, принадлежащие не-root userid, хотя каталог модулей принадлежит root. Если неподдерживаемый пользовательский код скомпрометирован, злоумышленник может перезаписать существующие модули, принадлежащие этому идентификатору пользователя, и использовать эту возможность для загрузки до корневого доступа.

По умолчанию modutils будет отклонять попытки использовать модуль, который не принадлежит root. Определение будет переключать проверку и разрешать root загружать модули, которые не принадлежат root.

Замечания: Значение по умолчанию для проверки root может быть изменено при настройке modutils.Использование -r для отключения проверки root или установки по умолчанию «no root check» во время настройки является серьезной угрозой безопасности и не рекомендуется.

-s, --syslog

Выведите все насистемный журнал(3) вместо терминала.

-S, --kallsyms

Заставить загруженный модульkallsyms данных, даже если ядро ​​его не поддерживает. Эта опция предназначена для небольших систем, в которых ядро ​​загружается безkallsyms данные, но выбранные модулиkallsyms для отладки. Этот вариант по умолчанию используется в Red Hat Linux.

-v, --подробный

Будьте многословными.

-V, --версия

Покажите версиюinsmod.

-ИКС, --export; -Икс, --noexport

Делайте и не экспортируйте все внешние символы модуля, соответственно. По умолчанию для экспортируемых символов. Этот параметр действует только в том случае, если модуль явно не экспортирует собственную таблицу контролируемых символов и, таким образом, устарел.

-Y, --ksymoops; -y, --noksymoops

Делайте и не добавляйтеksymoops символов к ксимсам. Эти символы используютсяksymoops чтобы обеспечить лучшую отладку, если в этом модуле есть Oops. Значение по умолчанию дляksymoopsсимволы, которые должны быть определены. Этот параметр не зависит от-ИКС/-Икс опции.

ksymoops символы добавляют примерно 260 байт на загружаемый модуль. Если вы на самом деле не хватает места на ядре и пытаетесь уменьшить ksyms до минимального размера, используйте значение по умолчанию и получите более точную отладку Oops.ksymoops для сохранения постоянных данных модуля требуются символы.

-N, --numeric только

Проверяйте только числовую часть версии модуля на версию ядра, т. Е. Игнорируйте EXTRAVERSION при выборе, принадлежит ли модуль ядру. Этот флаг автоматически устанавливается для ядра 2.5 и далее, он является дополнительным для более ранних ядер.

Параметры модуля

Некоторые модули принимают параметры времени загрузки для настройки их работы. Этими параметрами часто являются порт ввода-вывода и номера IRQ, которые варьируются от машины к машине и не могут быть определены с аппаратного обеспечения.

В модулях, построенных для ядер серии 2.0, любой символ целочисленного символа или символа может рассматриваться как параметр и модифицироваться. Начиная с ядер серии 2.1, символы явно помечены как параметры, так что только определенные значения могут быть изменены. Кроме того, информация типа предоставляется для проверки значений, предоставленных во время загрузки.

В случае целых чисел все значения могут быть десятичными, восьмеричными или шестнадцатеричными a la C: 17, 021 или 0x11. Элементы массива обозначают последовательность, разделенную запятыми. Элементы можно пропустить, опуская значение.

В модулях серии 2.0 значения, которые не начинаются с числа, считаются строками. Начиная с 2.1, информация о типе параметра указывает, следует ли интерпретировать значение как строку. Если значение начинается с двойных кавычек ('), строка интерпретируется как в C, escape-последовательностях и всех. Обратите внимание, что из командной строки сами кавычки могут нуждаться в защите от интерпретации оболочки.

Лицензированные модули и символы GPL

Начиная с ядра 2.4.10, модули должны иметь строку лицензии, определенную с использованиемMODULE_LICENSE (), Несколько строк распознаются как совместимые с GPL; любая другая лицензионная строка или никакая лицензия вообще не означает, что модуль рассматривается как собственность.

Если ядро ​​поддерживает/ Труды / SYS / ядро ​​/ испорченное флаг затемinsmod будет ли флаг tainted с «1» при загрузке модуля без лицензии GPL. Предупреждение выдается, если ядро ​​поддерживает tainting, и модуль загружается без лицензии. Предупреждение всегда выдается для модулей, которые имеютMODULE_LICENSE () это не совместимо с GPL, даже на старых ядрах, которые не поддерживают tainting. Это минимизирует предупреждения, когда новый modutils используется в старых ядрах.

insmod -f (силовой) режим, или испорченный флаг с «2» на ядрах, которые поддерживают tainting. Он всегда выдает предупреждение.

Некоторым разработчикам ядра требуется, чтобы символы, экспортируемые их кодом, должны использоваться только модулями с лицензией, совместимой с GPL. Эти символы экспортируютсяEXPORT_SYMBOL_GPL вместо нормальногоEXPORT_SYMBOL, Символы GPL, экспортируемые ядром и другими модулями, видны только для модулей с лицензией, совместимой с GPL, эти символы отображаются в/ Proc / символьный с префиксом 'GPLONLY_'. insmod игнорируетGPLONLY_ префикс на символы при загрузке лицензированного модуля GPL, поэтому модуль просто ссылается на нормальное имя символа без префикса. Символы GPL не доступны для модулей без лицензии на совместимость с GPL, включая модули без лицензии.

Помощь Ksymoops

Чтобы помочь в отладке ядра Упс при использовании модулей,insmod по умолчанию добавляет некоторые символы в ksyms, см.-Y вариант. Эти символы начинаются с__insmod_ modulename_ , имя_модуля требуется, чтобы символы были уникальными. Разрешено загружать один и тот же объект несколько раз под разными именами модулей. В настоящее время определены следующие символы:

__insmod_ имя_модуля _ Oobjectfile _ Mmtime _ Vversion

Объектный_файл это имя файла, из которого был загружен объект. Это гарантирует, что ksymoops может соответствовать коду правильному объекту. время изменения это последняя измененная метка времени в этом файле в шестнадцатеричном виде, ноль, если stat не удалось. версия это версия ядра, с которой был скомпилирован модуль, -1, если версия не доступна._O символ имеет тот же самый начальный адрес, что и заголовок модуля.

__insmod_ имя_модуля _ Ssectionname _ Llength

Этот символ появляется в начале выбранных разделов ELF, в настоящее время .text, .rodata, .data, .bss и .sbss. Он появляется только в том случае, если раздел имеет ненулевой размер. имя раздела это имя секции ELF, длина - длина раздела в десятичной системе. Эти символы помогают ksymoops отображать адреса в разделы, когда нет доступных символов.

__insmod_ имя_модуля _Ppersistent_ имя файла

Только созданныйinsmod если модуль имеет один или несколько параметров, которые помечены как постоянные данные и имя файла для сохранения постоянных данных (см.-e, выше).

Другая проблема с отладкой ядра Упс в модулях заключается в том, что содержимое / proc / ksyms а также / proc / modules может изменяться между Oops и при обработке файла журнала. Чтобы решить эту проблему, если каталог / var / log / ksymoops существует, тоinsmod а такжеrmmod автоматически копирует / proc / ksyms и / proc / modules в / var / log / ksymoops с префиксом `date +% Y% m% d% H% M% S`. Системный администратор может сообщить ksymoops, какие файлы моментальных снимков использовать при отладке Oops. Нет переключателя для отключения этой автоматической копии. Если вы не хотите, чтобы это произошло, не создавайте / var / log / ksymoops. Если этот каталог существует, он должен принадлежать root и быть режимом 644 или 600, и вы должны запускать этот скрипт каждый день или около того. Скрипт ниже установлен как insmod_ksymoops_clean.

#! / Bin / ш # Удалить сохраненные ksyms и модули, недоступные за 2 дня если -d / var / log / ksymoops затем set -e # Убедитесь, что всегда есть хотя бы одна версия d = `дата +% Y% m% d% H% M% S` cp -a / proc / ksyms /var/log/ksymoops/${d}.ksyms cp -a / proc / modules /var/log/ksymoops/${d}.modules find / var / log / ksymoops -type f -atime +2 -exec rm {} ; фи

Основная информация, которую нужно знать

НАЗВАНИЕ

insmod - установить загружаемый модуль ядра

СИНТАКСИС

insmod -fhkLmnpqrsSvVxXyYN -e persist_name -o module_name -O blob_name -П префикс модуль условное обозначение= значение …