Linux / Unix команда: insmod

Линукс / Unix командата insmod инсталира модул за зареждане в работещото ядро. insmod се опитва да свърже модул към работещото ядро, като разреши всички символи от експортираната таблица на символите на ядрото.

Ако името на файла на модула е дадено без директории или разширение, insmod ще търси модула в някои общи директории по подразбиране. Променливата на средата MODPATH може да се използва, за да се замени тази стойност по подразбиране. Ако съществува конфигурационен файл на модула като /etc/modules.conf , той ще замени пътищата, определени в MODPATH .

Променливата на средата MODULECONF може да се използва и за избор на друг конфигурационен файл от стандартната /etc/modules.conf (или /etc/conf.modules (deprecated)). Тази променлива на средата ще замени всички дефиниции по-горе.

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

Настроики

persist_name , -persist = persist_name

Указва къде са прочетени постоянни данни за модула от зареждането и са написани, когато тази инстанция на модула е разтоварена. Тази опция мълчаливо се игнорира, ако модулът няма постоянни данни. Постоянните данни се четат само от insmod, ако тази опция е налице, по подразбиране insmod не обработва постоянни данни.

Като кратка форма , -e " (празен низ) се интерпретира от insmod като стойността на persistdir, както е определена в modules.conf , следвана от името на файла на модула спрямо пътя за търсене на модула, в който е намерен, минус всички ".gz", ".o" или ".mod". Ако modules.conf указва " persistdir = " (т.е. persistdir е празно поле), тогава тази форма на стенография мълчаливо се игнорира. (Вж. Modules.conf (5).)

-f , --force

Опитайте да заредите модула дори ако версията на изпълняваното ядро ​​и версията на ядрото, за която модулът е компилиран, не съвпадат. Това само заменя проверката на версията на ядрото, няма ефект върху проверките на имената на символите. Ако имената на символите в модула не съвпадат с ядрото, няма начин да се наложи да заредите модула.

-h , --помагам

Покажете резюме на опциите и веднага излезте.

-k , --autoclean

Задайте флага за автоматично почистване на модула. Този флаг ще бъде използван от kerneld (8) за премахване на модули, които не са били използвани в даден период от време - обикновено една минута.

-L , - заключване

Използвайте стадо (2), за да предотвратите едновременно натоварване на същия модул.

-m , --map

Извеждайте карта за натоварване на stdout, което улеснява отстраняването на грешки в модула в случай на паника на ядрото.

-n , --nooload

Dummy тичам, правете всичко, освен да заредите модула в ядрото. Ако поиска от -m или -O , тестът ще доведе до създаване на карта или на файл blob. Тъй като модулът не е зареден, истинският адрес на зареждане на ядрото е неизвестен, така че картата и файлът blob са базирани на произволен адрес на зареждане от 0x12340000.

-o име_модул , --name = име_модул

Изрично наименувайте модула, вместо да извеждате името от базовото име на файла на обекта на изход.

-Blob_name , --blob = име на блок_bob

Запазете двоичния обект в blob_name . Резултатът е двоичен печат (без ELF заглавия), показващ точно това, което се зарежда в ядрото след манипулация и преместване на секцията. Опцията -m се препоръчва, за да получите карта на обекта.

-p , -проба

Проучете модула, за да видите дали може да бъде зареден успешно . Това включва намиране на файла на обекта в пътя на модула, проверка на номерата на версиите и разрешаване на символите. Той не проверява преместванията, нито пък произвежда карта или блок файл.

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

Тази опция може да се използва с модифицирани модули за SMP или bigmem ядро, тъй като такива модули имат допълнителен префикс, добавен в техните имена на символи. Ако ядрото е изградено със символни версии, insmod автоматично ще извлече префикса от дефиницията "get_module_symbol" или "inter_module_get", един от които трябва да съществува във всяко ядро, което поддържа модули. Ако ядрото няма версии на символи, но модулът е бил изграден със символни версии, тогава потребителят трябва да предостави -P .

-q , --quiet

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

-r , - корен

Някои потребители съставят модули под не-root userid, след което инсталират модулите като root. Този процес може да напусне модулите, собственост на потребителя с не-root, въпреки че модулната директория е собственост на root. Ако потребителският потребител, различен от root, е компрометиран, натрапникът може да презапише съществуващите модули, притежавани от този потребителски потребител, и да използва тази експозиция, за да стартира достъпа до root.

По подразбиране modutils ще отхвърли опитите за използване на модул, който не е собственост на root. Задаването на -r ще превключи на проверката и ще позволи на root да зареди модули, които не са собственост на root. Забележка: Стойността по подразбиране за проверката на командата може да бъде променена при конфигуриране на modutils.

Използването на -r, за да деактивирате проверката на корен или да зададете по подразбиране "без проверка на корен" по време на конфигуриране, е основна експозиция за сигурност и не се препоръчва.

-s , - syslog

Извеждайте всичко в syslog (3) вместо терминала.

-S , - kallsyms

Принуждавайте заредения модул да има данни от kallsyms , дори ако ядрото не го поддържа. Тази опция е за малки системи, където ядрото се зарежда без данни на kallsyms, но избраните модули се нуждаят от kallsyms за отстраняване на грешки. Тази опция е по подразбиране за Red Hat Linux.

-v , --verbose

Бъдете подробни.

-V , --version

Показване на версията на insmod .

-X , --export ; -x , --exexport

Направете и не експортирайте всички външни символи на модула съответно. По подразбиране се използват символите за експортиране. Тази опция е ефективна само ако модулът изрично не експортира своя собствена контролирана таблица със символи и следователно е отхвърлен.

-Y , -syymoops ; -y , - noksymoops

Направете и не добавяйте символите ksymoops на ksyms . Тези символи се използват от ksymoops, за да осигурят по-добро отстраняване на грешки, ако има Aops в този модул. По подразбиране се определят символите ksymoops . Тази опция е независима от опциите -X / -x .

Символите ksymoops добавят приблизително 260 байта на зареден модул. Освен ако не сте много малко в пространството на ядрото и се опитвате да намалите ksyms до минималния му размер, вземете по подразбиране и получите по-точна грешка. символите ksymoops са необходими, за да се запазят постоянните модулни данни.

-N , - числено само

Проверявайте само цифровата част на версията на модула срещу версията на ядрото, т.е. пренебрегвайте EXTRAVERSION, когато решавате дали даден модул принадлежи на ядрото. Този флаг се задава автоматично за ядрото 2.5 нататък, той е по избор за по-ранни ядра.

Модул Параметри

Някои модули приемат параметри за зареждане, за да персонализират работата си. Тези параметри често са I / O порт и IRQ номера, които се различават от машината до машината и не могат да бъдат определени от хардуера.

В модули, изградени за ядки от серия 2.0, всеки символ на целочислен или символен знак може да бъде третиран като параметър и модифициран. Започвайки от ядрата от серия 2.1, символите са изрично означени като параметри, така че само определени стойности могат да бъдат променени. Освен това се предоставя информация за типа за проверка на стойностите, предоставени при време на зареждане.

В случай на цели числа, всички стойности могат да бъдат в десетични, осми или шестнадесетични a la C: 17, 021 или 0x11. Елементите на масива са определени последователност, разделена със запетаи. Елементите могат да бъдат пропуснати чрез пропускане на стойността.

В модули от серия 2.0 стойности, които не започват с число, се считат за струни. Започвайки от 2.1, информацията за типа на параметъра показва дали да се тълкува стойността като низ. Ако стойността започва с двойни кавички ( " ), низът се интерпретира като в C, евакуационните последователности и всички. Имайте предвид, че от командата за shell, може да се наложи самите котировки да бъдат защитени от интерпретацията на shell.

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

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

Ако ядрото поддържа флагът / proc / sys / kernel / tainted, тогава insmod ще бъде ИЛИ опетнен флаг с '1' при зареждане на модул без GPL лиценз. Предоставя се предупреждение, ако ядрото поддържа оцветяване и модулът се зарежда без лиценз. Винаги се издава предупреждение за модули, които имат MODULE_LICENSE (), който не е съвместим с GPL, дори при по-стари ядра, които не поддържат оцветяване. Това минимизира предупрежденията, когато се използва нов modutils на по-стари ядра.

insmod -f (сила) режим ще ИЛИ опетнен флаг с "2" на ядки, които подкрепят оцветяване. Той винаги издава предупреждение.

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

Помощ за Ksymoops

За да помогнете при отстраняването на грешки в ядрото Ами сега, когато използвате модули, включете по подразбиране добавянето на някои символи към ksyms, вижте опцията -Y . Тези символи започват с __insmod_modulename_ . Модулното име е необходимо, за да се направят символите уникални. Задължително е да заредите същия обект повече от веднъж под различни имена на модули. Понастоящем дефинираните символи са:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile е името на файла, от който е зареден обектът. Това гарантира, че ksymoops може да съответства на кода на правилния обект. mtime е последният модифициран времеви маркер на този файл в шестнадесетичен, нула, ако stat не е успял. версия е версията на ядрото, за която е компилиран модулът, -1, ако няма налична версия. Символът _O има същия начален адрес като заглавния модул.

__insmod_modulename_Ssectionname_Llength

Този символ се появява в началото на избраните секции ELF, в момента .text, .rodata, .data, .bss и .sbss. Показва се само ако секцията има ненулев размер. сечение е името на секцията ELF, дължината е дължината на секцията в десетичната. Тези символи помагат на ksymoops да пренасочват адресите към секции, когато няма налични символи.

__insmod_modulename_Ppersistent_filename

Създава се само от insmod, ако модулът има един или повече параметри, които са маркирани като постоянни данни и име на файл, което да запазва устойчивите данни (вижте -e , по-горе).

Другият проблем с отстраняването на грешките в ядрото Опитите в модулите са, че съдържанието на / proc / ksyms и / proc / modules може да се промени между Aops и когато обработвате лог файла. За да помогнем да се преодолее този проблем, ако директорията / var / log / ksymoops съществува, тогава insmod и rmmod автоматично ще копират / proc / ksyms и / proc / modules към / var / log / ksymoops с префикс 'date +% Y% m % D% Н% М% S`. Системният администратор може да каже на ksymoops кои файлове с моментна снимка да използват при отстраняване на грешки в Oops. Няма автоматично превключване, което да деактивира това автоматично копиране. Ако не искате това да се случи, не създавайте / var / log / ksymoops . Ако тази директория съществува, тя трябва да бъде собственост на root и да бъде режим 644 или 600 и трябва да стартирате този скрипт всеки ден или така. Сценарият по-долу е инсталиран като insmod_ksymoops_clean .

Основна информация, която трябва да знаете

ИМЕ

инсталирайте модула за зареждане на ядрото

Кратък обзор

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [ -a име на модул ] [-O blob_name ] [-P префикс ] модул [ символ = стойност ...]