Príkaz Linux / Unix: insmod

Príkaz insmod Linux / Unix nainštaluje načítajúci modul do bežiaceho jadra. insmod sa pokúsi prepojiť modul do bežiaceho jadra vyriešením všetkých symbolov z exportovanej tabuľky symbolov jadra.

Ak je názov súboru modulu uvedený bez adresárov alebo rozšírení, insmod vyhľadá modul v niektorých bežných štandardných adresároch. Premennú prostredia MODPATH možno použiť na prekonanie tejto predvolenej hodnoty. Ak existuje konfiguračný súbor modulu, ako napríklad /etc/modules.conf , prepíše cesty definované v MODPATH .

Premenná prostredia MODULECONF sa môže použiť aj na výber iného konfiguračného súboru zo štandardnej /etc/modules.conf (alebo /etc/conf.modules (zastaraný)). Táto premenná prostredia prekoná všetky vyššie uvedené definície.

Keď je nastavená premenná prostredia UNAME_MACHINE , modutils použije svoju hodnotu namiesto poľa stroja z systéme uname (). To sa používa hlavne pri kompilácii 64-bitových modulov v 32-bitovom užívateľskom priestore alebo naopak, nastavte UNAME_MACHINE na typ modulov. Súčasné moduly nepodporujú režim plného krížového zostavenia pre moduly, je obmedzený na výber medzi 32- a 64-bitovými verziami hostiteľskej architektúry.

možnosti

-es persist_name , --persist = pretrváva_zmenu

Určuje, kde sa prečítajú pretrvávajúce dáta modulu od načítania a zapisujú sa do momentu, kedy je táto inštancia modulu vyložená. Táto možnosť sa ticho ignoruje, ak modul nemá žiadne pretrvávajúce údaje. Pretrvávajúce údaje sú čítané len pomocou insmod, ak je táto voľba prítomná, v predvolenom nastavení insmod nespracováva pretrvávajúce údaje.

Ako skrátenú formu je -e "" (prázdny reťazec) interpretovaný ako insmod ako hodnota persistdir, ako je definovaná v module.conf, za ktorým nasleduje názov súboru modulu vzhľadom na vyhľadávaciu cestu modulu, v ktorej bol nájdený, trailing ".gz", ".o" alebo ".mod". Ak moduly.conf špecifikujú " persistdir = " (tj. Persistdir je prázdne pole), táto skrátená forma je ticho ignorovaná. (Pozri modules.conf (5).)

-f , --force

Pokúste sa načítať modul aj v prípade, že verzia jadra a verzie jadra, pre ktorú bol modul zostavený, sa nezhodujú. Toto iba prekoná kontrolu verzie jadra, nemá žiadny vplyv na kontrolu názvu symbolu. Ak sa názvy symbolov v module nezhodujú s jadrom, neexistuje žiadny spôsob, ako vynútiť vloženie modulu.

-h , --help

Zobrazte súhrn možností a ihneď ukončíte.

-k , --autoclean

Nastavte príznak automatického čistenia na module. Tento príznak používa kerneld (8) na odstránenie modulov, ktoré neboli použité v určitej dobe - zvyčajne jednu minútu.

-L , --lock

Použite kŕdeľ (2), aby sa zabránilo súčasnému zaťaženiu toho istého modulu.

-m , --map

Vytvorte mapu načítania na stdout, čo uľahčí ladenie modulu v prípade paniky jadra.

-n , --no

Falošný beh, robte všetko okrem načítania modulu do jadra. Ak to požaduje -m alebo -O , spustenie vytvorí mapu alebo súbor blob. Keďže modul nie je načítaný, skutočná adresa zaťaženia jadra nie je známa, takže mapa a súbor blob sú založené na ľubovoľnej adrese zaťaženia 0x12340000.

-o modul_name , --name = modul_name

Explicitne pomenujte modul, namiesto odvodenia názvu zo základného názvu súboru zdrojového objektu.

-Obob_name , --blob = názov_blobu

Uložte binárny objekt do adresy blob_name . Výsledkom je binárna blob (bez hlavičky ELF), ktorá presne zobrazuje to, čo sa načíta do jadra po manipulácii a premiestnení sekcie. Možnosť- m sa odporúča na získanie mapy objektu.

-p , --probe

Skontrolujte modul, či sa dá úspešne načítať . To zahŕňa vyhľadanie súboru objektov v ceste k modulu, kontrola verzií a vyriešenie symbolov. Nekontroluje premiestnenia ani nevytvára mapu alebo súbor blob.

Predpona -P , --prefix = predpona

Táto možnosť sa môže použiť s verzovanými modulmi pre SMP alebo veľkokapacitné jadro, pretože tieto moduly majú v ich názvoch symbolov doplnkovú predponu. Ak bolo jadro vytvorené s verziami symbolov, potom insmod automaticky extrahuje predponu z definície "get_module_symbol" alebo "inter_module_get", pričom jedna z nich musí existovať v každom jadre, ktoré podporuje moduly. Ak jadro nemá žiadne verzie symbolov, ale modul bol vytvorený s verziami symbolov, potom používateľ musí poskytnúť -P .

-q , --quiet

Nevytlačte zoznam nevyriešených symbolov. Nesťažujte sa o nesúlade verzie. Problém sa prejaví iba v stave výstupu insmod .

-r , - root

Niektorí používatelia zostavujú moduly pod užívateľom typu non-root, potom nainštalujú moduly ako root. Tento proces môže ponechať moduly vo vlastníctve užívateľského rozhrania bez oprávnení root, hoci adresár modulov je vlastnený rootom. Ak je narušená užívateľská oprávnená služba typu non-root, vták môže prepísať existujúce moduly, ktoré vlastní daný používateľský účet, a túto expozíciu používať na spustenie systému root na prístup k root.

Štandardne modutils odmietne pokusy o použitie modulu, ktorý nie je vlastnený rootom. Zadaním príkazu -r sa prepne kontrola a povolí sa načítanie modulov, ktoré nie sú vlastnené rootom. Poznámka: predvolená hodnota pre koreňovú kontrolu môže byť zmenená, keď je modutils nakonfigurovaný.

Použitie -r na zakázanie kontroly koreňov alebo nastavenie predvolenej hodnoty na "žiadnu koreňovú kontrolu" v čase konfigurácie je dôležitá bezpečnostná expozícia a nedoporučuje sa.

-s , - syslog

Vykonajte všetko na syslog (3) namiesto terminálu.

-S , --kallsyms

Vynútené načítanie modulu kallsyms , aj keď jadro ho nepodporuje. Táto možnosť je pre malé systémy, kde je kernel načítaný bez kallsyms dát, ale vybrané moduly potrebujú kallsyms pre ladenie. Táto možnosť je predvolená v systéme Red Hat Linux.

-v , --verbose

Buďte verbózni.

-V , --version

Zobraziť verziu insmod .

-X , --export ; -x , --noexport

Vykonajte a nevyexportujte všetky externé symboly modulu. Predvolená hodnota je pre exportované symboly. Táto možnosť je účinná len vtedy, ak modul explicitne nevyexportuje vlastnú tabuľku riadených symbolov, a preto je zastaraný.

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

Pridajte a nepridávajte symboly ksymoops do ksyms. Tieto symboly používajú ksymoops, aby poskytli lepšie ladenie, ak je v tomto module prítomný znak Oops. Predvolená hodnota je definovaná pre symboly ksymoops . Táto možnosť je nezávislá od volieb -X / -x .

symboly ksymoops pridávajú približne 260 bajtov na načítaný modul. Ak nie ste naozaj nedostatok priestoru jadra a snažíte sa znížiť ksyms na jeho minimálnu veľkosť, vezmite si predvolené a získajte presnejšie Oops debugging. symboly ksymoops sú potrebné na ukladanie pretrvávajúcich dát modulu.

-N , - len číselné

Skontrolujte číselnú časť verzie modulu verzie jadra, tj ignorujte EXTRAVERSION pri rozhodovaní, či modul patrí do jadra. Tento príznak je automaticky nastavený na jadro 2.5 ďalej, je voliteľný pre predchádzajúce jadrá.

Parametre modulu

Niektoré moduly prijímajú parametre načítania času na prispôsobenie ich prevádzky. Tieto parametre sú často I / O port a IRQ čísla, ktoré sa líšia od stroja k stroju a nedajú sa určiť z hardvéru.

V moduloch postavených pre jadrá radu 2.0 môže byť akýkoľvek znak s celým číslom alebo ukazovateľom znakov považovaný za parameter a upravený. Počnúc jadrami série 2.1 sú symboly explicitne označené ako parametre, takže sa môžu meniť iba špecifické hodnoty. Ďalej sú k dispozícii informácie typu na kontrolu hodnôt poskytnutých pri zaťažení.

V prípade celých čísel môžu byť všetky hodnoty v desiatkovej, osmičke alebo hexadecimálnej a la C: 17, 021 alebo 0x11. Prvky polí sú špecifikované postupne oddelené čiarkami. Prvky môžu byť preskočené vynechaním hodnoty.

V moduloch radu 2.0 sa hodnoty, ktoré nezačínajú číslom, považujú za reťazce. Počnúc od 2.1 informácia o type parametra označuje, či sa má hodnota interpretovať ako reťazec. Ak hodnota začína dvojitými úvodzovkami ( " ), reťazec sa interpretuje ako v C, únikových sekvenciách a všetko. Všimnite si, že z príkazového riadku shellu môžu byť citácie sami potrebné chrániť pred interpretáciou shellu.

Licencované moduly a symboly GPL

Počnúc jadrom 2.4.10 by moduly mali mať licenčný reťazec definovaný pomocou MODULE_LICENSE () . Niekoľko reťazcov sa považuje za kompatibilné s GPL. akýkoľvek iný licenčný reťazec alebo žiadna licencia vôbec neznamená, že sa s týmto modulom zaobchádza ako s majetkom.

Ak jadro podporuje príkaz / proc / sys / kernel / tainted, potom sa pri načítaní modulu bez licencie GPL stane insmod OR poškodený príznak s '1'. Ak jadro podporuje vymaľovanie a modul je načítaný bez licencie, vydá sa varovanie. Výstraha sa vždy vydáva pre moduly s MODULE_LICENSE (), ktoré nie sú kompatibilné s GPL, ani na starších jadrách, ktoré nepodporujú poškodenie. Toto minimalizuje upozornenia pri používaní nových modulov na starších jadrách.

insmod -f (force) módu bude OR poznačená vlajka s "2" na jadrách, ktoré podporujú odfarbenie. Vždy vydá varovanie.

Niektorí vývojári jadra vyžadujú, aby symboly vyexportované ich kódom používali iba moduly s licenciou kompatibilnou s licenciou GPL. Tieto symboly sa exportujú pomocou EXPORT_SYMBOL_GPL namiesto normálnej EXPORT_SYMBOL . GPL-symboly vyexportované jadrom a inými modulmi sú viditeľné iba pre moduly s licenciou kompatibilnou s GPL, tieto symboly sa objavujú v / proc / ksyms s prefixom ' GPLONLY_ '. insmod ignoruje predponu GPLONLY_ na symboloch pri načítaní licenčného modulu GPL, takže modul sa vzťahuje iba na normálny názov symbolu bez predpony. Symboly iba pre GPL nie sú k dispozícii pre moduly bez licencie kompatibilnej s licenciou GPL, ale aj pre moduly bez licencie.

Ksymoops Assistance

Ak chcete pomôcť s ladením jadra Oops pri používaní modulov, inštalujte predvolené pridávanie niektorých symbolov do ksymov, pozri voľbu -Y . Tieto symboly začínajú znakom __insmod_modulename_ . Modulové mená sa vyžadujú na vytvorenie jedinečných symbolov. Je zákonné načítať ten istý objekt viac ako raz pod rôznymi názvami modulov. V súčasnosti sú definované symboly:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile je názov súboru, z ktorého bol objekt načítaný. To zabezpečí, že ksymoops dokáže zodpovedať kódu správnemu objektu. mtime je posledná zmenená časová pečiatka v tomto súbore v hexadecku, nula, ak sa štát nepodarilo. verzia jadra, pre ktorú bol modul kompilovaný, -1, ak nie je k dispozícii žiadna verzia. Symbol _O má rovnakú štartovaciu adresu ako hlavička modulu.

__insmod_modulename_Ssectionname_Llength

Tento symbol sa zobrazí na začiatku vybratých sekcií ELF, v súčasnosti .text, .rodata, .data, .bss a .sbss. Zobrazuje sa iba vtedy, ak má sekcia nenulovú veľkosť. názov sekcie je názov sekcie ELF, dĺžka je dĺžka oddielu v desiatkovej časti. Tieto symboly pomáhajú ksymoops mapovať adresy na sekcie, keď nie sú k dispozícii žiadne symboly.

__insmod_modulename_Ppersistent_filename

Vytvára sa iba v prípade, že modul obsahuje jeden alebo viacero parametrov označených ako trvalé údaje a názov súboru na uloženie pretrvávajúcich údajov (pozri -e , vyššie).

Druhý problém s ladením jadra Oops v moduloch spočíva v tom, že obsah / proc / ksyms a / proc / modules sa môže zmeniť medzi Oopsom a procesom súboru denníka. Ak chceme tento problém prekonať, ak adresár / var / log / ksymoops existuje, potom insmod a rmmod automaticky kopírujú / proc / ksyms a / proc / modules na / var / log / ksymoops s predponou ` % d% H% M% s`. Správca systému môže povedať ksymoops, ktoré súbory snímok použiť pri ladení Oops. Pre automatickú kópiu nie je žiadny prepínač. Ak nechcete, aby sa vyskytla, nevytvárajte / var / log / ksymoops . Ak tento adresár existuje, mal by byť vlastnený rootom a režimom 644 alebo 600 a mali by ste spustiť tento skript každý deň alebo tak. Nasledujúci skript je nainštalovaný ako insmod_ksymoops_clean .

Základné informácie, ktoré je potrebné poznať

NÁZOV

insmod - nainštalujte modul načítania jadra

SYNOPSA

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o modul_name ] [-O blob_name ] [-P prefix ] modul [ symbol = hodnota ...]