Skip to main content

Všetko o príkazu Linux / Unix: insmod

Anonim

Príkaz Linux / Unix insmod nainštaluje na spustené jadro modul, ktorý sa dá načítať.insmod pokúša sa prepojiť modul na spustené jadro 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šírenia,insmod vyhľadá modul v niektorých bežných štandardných adresároch. Premenná prostrediaMODPATH možno použiť na prekonanie tohto predvoleného nastavenia. Ak je konfiguračný súbor modulu, ako napr/etc/modules.conf existuje, prepisuje cesty definované vMODPATH.

Premenná prostrediaMODULECONF možno tiež použiť na výber iného konfiguračného súboru z predvoleného nastavenia/etc/modules.conf (alebo/etc/conf.modules (Zastarané)). Táto premenná prostredia prekoná všetky vyššie uvedené definície.

Pri premennej prostrediaUNAME_MACHINE je nastavený, modutils bude používať svoju hodnotu namiesto poľa stroja z príkazu uname () syyscall. Používa sa predovšetkým pri zostavovaní 64-bitových modulov v 32-bitovom užívateľskom priestore alebo naopakUNAME_MACHINE na typ modulov. Súčasné moduly nepodporujú moduly plného krížového zostavovania, ale sú obmedzené na výber medzi 32 a 64-bitovými verziami hostiteľskej architektúry.

možnosti

-e persist_name , --persist= persist_name

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. Trvalé údaje sa čítajú leninsmod ak je táto voľba prítomná, štandardneinsmod nepracuje pretrvávajúce údaje.

Ako skrátenú formu,-e "" (prázdny reťazec) interpretujeinsmod ako hodnotapersistdir ako je definované vmodules.conf, za ktorým nasleduje názov súboru modulu vzhľadom na vyhľadávaciu cestu modulu, v ktorej bola nájdená, mínus všetky koncové ".gz", ".o" alebo ".mod". akmodules.conf špecifikuje "persistdir ="(t.j.persistdir je prázdne pole), potom táto skrátená forma je ticho ignorovaná. (Pozrimodules.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, potom neexistuje spôsob, ako vynútiťinsmod modul načítať.

-h, --Pomoc

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

-k, --automatické čistenie

Nastavte príznak automatického čistenia na module. Tento príznak bude používaťkerneld(8), aby ste odstránili moduly, ktoré sa nepoužili v určitej dobe - zvyčajne jednu minútu.

-L, --lock

použitiestádo(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, --noload

Falošný beh, robte všetko okrem načítania modulu do jadra. Ak o to požiada-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 název_modulu , --názov= název_modulu

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

-O blob_name , --blob= blob_name

Uložiť binárny objekt v 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. voľba-m sa odporúča získať mapu 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.

-P prefix , --prefix= prefix

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 postavené s verziami symbolovinsmod automaticky vyberie 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 neobsahuje žiadne verzie symbolov, ale modul bol vytvorený so symbolickými verziami, musí to používateľ dodať-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ýstupuinsmod.

-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. určenie -r bude prepínať kontrolu a umožní root načítať moduly, 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šetkosyslog(3) namiesto terminálu.

-S, --kallsyms

Vynúte naložený modulkallsyms údajov, aj keď to jadro nepodporuje. Táto možnosť je určená pre malé systémy, v ktorých je nainštalované jadrokallsyms údaje, ale vyžadujú si vybraté modulykallsyms na ladenie. Táto možnosť je predvolená v systéme Red Hat Linux.

-v, --verbose

Buďte verbózni.

-V, --version

Zobraziť verziu programuinsmod.

-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 nepoužívajteksymoops symboly na ksyms. Tieto symboly používaksymoops poskytnúť lepšie ladenie, ak je v tomto module prítomný názov "Oops". Predvolená hodnota je preksymoopssymboly, ktoré sa majú definovať. Táto možnosť je nezávislá na-X/-X možnosti.

ksymoops symboly 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.ksymoops sú potrebné symboly na uloženie pretrvávajúcich dát modulov.

-N, --numeric-only

Skontrolujte číselnú časť verzie modulu verzie jadra, t. J. 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é sekvencie a všetky. Berte na vedomie, že z výzvy na shell, môže byť potrebné uviesť, že samotné úvodzovky by mali byť chránené 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ý pomocouMODULE_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/ Preco / sys / kernel / pokazené príznak potominsmod bude ALEBO poškodený vlajka s '1' pri načítaní modulu bez licencie GPL. Ak jadro podporuje vymaľovanie a modul je načítaný bez licencie, vydá sa varovanie. Výstraha sa vždy vydáva pre moduly, ktoré majú aMODULE_LICENSE () ktorý nie je 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 (silový) režim bude OR poškodený 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 vyvážajúEXPORT_SYMBOL_GPL namiesto normálnehoEXPORT_SYMBOL, Iba symboly GPL vyexportované jadrom a inými modulmi sú viditeľné iba pre moduly s licenciou kompatibilnou s GPL, tieto symboly sa zobrazujú v/ Preco / ksyms s predponou "GPLONLY_'. insmod ignorujeGPLONLY_ predponu na symboly pri načítavaní modulu s licenciou GPL, takže modul sa vzťahuje len 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

Pomáha pri ladení jadra Oops pri používaní modulov,insmod predvolené pridávanie niektorých symbolov do ksyms, viďY voľba. Tieto symboly začínajú__insmod_ modulename_ , modulename je potrebné, aby symboly boli jedinečné. 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 hexadecimálnom formáte, nula, ak sa stav nepodarilo. verzia je verzia jadra, pre ktorú bol modul kompilovaný, -1, ak nie je dostupná žiadna verzia._O symbol 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 sústave. Tieto symboly pomáhajú ksymoops mapovať adresy na sekcie, keď nie sú k dispozícii žiadne symboly.

__insmod_ modulename _Ppersistent_ názov súboru

Vytvoril ibainsmod ak má modul jeden alebo viac parametrov, ktoré sú označené ako pretrvávajúce ú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 je, že obsah / proc / ksyms a / proc / modules sa môžu meniť medzi Oops a pri spracovaní súboru denníka. Ak chcete pomôcť prekonať tento problém, ak existuje adresár / var / log / ksymoopsinsmod armmod bude automaticky kopírovať / proc / ksyms a / proc / modules na / var / log / ksymoops s predponou "date +% Y% m% 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.

#! / Bin / sh # Odstrániť uložené ksymy a moduly, ktoré neboli prístupné za 2 dni ak -d / var / log / ksymoops potom set -e # Uistite sa, že je vždy aspoň jedna verzia d = `dátum +% Y% m% d% H% M% S` cp -a / proc / ksyms /var/log/ksymoops/${d}.ksyms cp -a / proc / modules /var/log/ksymoops/${d}moduly nájsť / var / log / ksymoops - typ f -atime +2 -exec rm {} ; fi

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

NÁZOV

insmod - nainštalujte modul načítania jadra

SYNOPSA

insmod -fhkLmnpqrsSvVxXyYN -e persist_name -o název_modulu -O blob_name -P prefix modul symbol= hodnota …