Все о Linux / Unix Команда: insmod

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

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

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

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

Параметры

 persist_name, —упорствовать= persist_name

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

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

—сила

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

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

Показать сводку опций и сразу выйти.

—Автоматическая очистка

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

-L—замок

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

—карта

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

-N—нет загрузки

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

 module_name, —имя= module_name

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

 blob_name, —капля= blob_name

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

-п—зонд

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

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

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

-Q—тихий

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

—корень

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

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

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

-s—системный журнал

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

-S—kallsyms

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

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

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

—версия

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

-Икс—экспорт-Икс—NOEXPORT используются для явного

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

-Y—ksymoops-Y—noksymoops

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

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

-N—Числовой только

Проверяйте только числовую часть версии модуля относительно версии ядра, т.е. игнорируйте 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 ИЛИ помечает помеченный флаг знаком «1» при загрузке модуля без лицензии GPL. Предупреждение выдается, если ядро ​​поддерживает заражение и модуль загружается без лицензии. Предупреждение всегда выдается для модулей, которые имеют MODULE_LICENSE () это не совместимо с GPL, даже на старых ядрах, которые не поддерживают заражение. Это сводит к минимуму предупреждения при использовании нового модуля на старых ядрах.

insmod -f (принудительный) режим ИЛИ помечает помеченный флаг ‘2’ в ядрах, которые поддерживают заражение. Это всегда выдает предупреждение.

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

Ксимупс Ассистанс

Чтобы помочь с отладкой ядра Oops при использовании модулей, insmod по умолчанию добавление некоторых символов в ksyms, см. -Y вариант. Эти символы начинаются с __insmod_modulename_. Имя модуля требуется для того, чтобы символы были уникальными. Допустимо загружать один и тот же объект более одного раза под разными именами модулей. В настоящее время определены символы:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

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

__insmod_modulename_Ssectionname_Llength

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

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

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

Другая проблема с отладкой ядра Oops в модулях заключается в том, что содержимое / 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 / ш
# Удалить сохраненные файлы и модули, к которым нет доступа в течение 2 дней
если [-d / var / log / ksymoops]
тогда
установить -е
# Убедитесь, что всегда есть хотя бы одна версия
d = `дата +% Y% m% d% H% M% S`
cp -a / proc / ksyms /var/log/ksymoops/$ndomd отпуска.ksyms
cp -a / proc / modules /var/log/ksymoops/$ndomd‹.modules
find / var / log / ksymoops -type f -atime +2 -exec rm {} \;
фи

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

ИМЯ

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

СИНТАКСИС

insmod [-fhkLmnpqrsSvVxXyYN] [-e имя_постоянного_имя] [-omodule_name] [-O имя_блока] [-P префикс] модуль [условное обозначение= значение …]

Ссылка на основную публикацию