Příkaz Linux / Unix: insmod

Instalační příkaz Linux / Unix instmod nainstaluje načtený modul do běžícího jádra. insmod se pokusí propojit modul do běžícího jádra tím, že vyřeší všechny symboly z exportované tabulky symbolů jádra.

Pokud je název souboru modulu uveden bez adresářů nebo rozšíření, insmod vyhledá modul v některých běžných výchozích adresářích. Prostřednictvím proměnné prostředí MODPATH lze tuto výchozí hodnotu přepsat. Pokud existuje konfigurační soubor modulu, jako je /etc/modules.conf , přepíše cesty definované v MODPATH .

Proměnná prostředí MODULECONF lze také použít k výběru jiného konfiguračního souboru z výchozího souboru /etc/modules.conf (nebo /etc/conf.modules (zastaralý)). Tato proměnná prostředí přepsá všechny výše uvedené definice.

Pokud je nastavena proměnná prostředí UNAME_MACHINE , modutils použije svou hodnotu namísto pole stroje z příkazu uname (). Používá se hlavně při kompilaci 64bitových modulů v 32bitovém uživatelském prostoru nebo naopak, nastavte UNAME_MACHINE na typ modulů. Současné moduly nepodporují moduly plného křížového budování, je omezeno na výběr mezi 32- a 64bitovými verzemi hostitelské architektury.

Možnosti

-e persist_name , --persist = persist_name

Určuje, kde jsou přečtené trvalé údaje modulu z načtení a zapsány do okamžiku, kdy je tato instance modulu uvolněna. Tato možnost je ignorována tiše, pokud modul neobsahuje trvalé údaje. Trvalá data jsou přečteny pouze od insmod, pokud je tato možnost k dispozici, ve výchozím nastavení insmod neprocesuje přetrvávající data.

Jako zkrácená forma je -e "" (prázdný řetězec) interpretován jako insmod jako hodnota persistdir definovaná v modules.conf , následovanou názvem souboru modulu ve vztahu k vyhledávací cestě modulu, která byla nalezena, mínus libovolné trailing ".gz", ".o" nebo ".mod". Pokud moduly.conf specifikují " persistdir = " (tj. Persistdir je prázdné pole), pak tato zkrácená forma je tiše ignorována. (Viz modules.conf (5).)

-f , --force

Pokus o načtení modulu i v případě, že verze běžícího jádra a verze jádra, pro které byl modul kompilován, neodpovídají. To pouze přepíše kontrolu verzí jádra, nemá žádný vliv na kontrolu názvu symbolu. Pokud se názvy symbolů v modulu neodpovídají jádru, neexistuje způsob, jak vynutit vložení modulu.

-h , --help

Zobrazte přehled možností a okamžitě ukončete.

-k , --autoclean

Na modulu nastavte příznak automatického vyčištění. Tento příznak použije kerneld (8) k odstranění modulů, které nebyly v určité době použity - obvykle jedna minuta.

-L , - zamknout

Použijte hejno (2), abyste zabránili současnému zatížení stejného modulu.

-m , --map

Vyjměte mapu zatížení na stdout, což usnadňuje ladění modulu v případě paniky jádra.

-n , --no

Dummy běh, dělat všechno kromě načtení modulu do jádra. Pokud je požadováno parametrem -m nebo -O , spustí sestava mapu nebo soubor blob. Vzhledem k tomu, že modul není načten, skutečná adresa načtení jádra není známa, takže mapa a soubor blob jsou založeny na libovolné adrese zatížení 0x12340000.

-o modul_name , --name = název_modulu

Explicitně pojmenujte modul namísto odvození názvu ze základního názvu souboru zdrojového objektu.

-Obob_name , --blob = jméno_obal

Uložte binární objekt do adresáře blob_name . Výsledkem je binární blob (bez hlaviček ELF), který přesně ukazuje to, co je vloženo do jádra po manipulaci se sekci a přemístění. Možnost -m se doporučuje získat mapu objektu.

-p , --probe

Vyzkoušejte modul a zjistěte, zda lze úspěšně načíst . To zahrnuje lokalizaci souboru objektu v cestě modulu, kontrolu čísel verzí a vyřešení symbolů. Nezkontroluje přemístění ani nevytváří mapu nebo soubor blob.

-P předpona , --prefix = předpona

Tato volba může být použita s verzovanými moduly pro jádro SMP nebo bigmem, protože tyto moduly mají v jejich jménech symbolů další předponu. Pokud bylo jádro postaveno s verzemi symbolů, pak insmod automaticky extrahuje předponu z definice "get_module_symbol" nebo "inter_module_get", z nichž jedna musí existovat v jádře, které podporuje moduly. Pokud jádro nemá žádné verze symbolů, ale modul byl postaven s verzemi symbolů, pak musí uživatel poskytnout -P .

-q , --quiet

Nevytiskněte seznam nevyřešených symbolů. Nepokoušejte se o neshodě verzí. Problém se projeví pouze ve stavu výstupu insmod .

-r , - root

Někteří uživatelé sestavují moduly pod uživatelem bez oprávnění root a pak nainstalují moduly jako root. Tento proces může opustit moduly vlastněné uživatelským jménem bez oprávnění root, přestože adresář modulů je vlastněn kořenem. Pokud je uživatelská oprávnění typu non-root kompromitována, může útočník přepsat existující moduly vlastněné daným uživatelským jménem a tuto expozici použít k zavedení do kořenového přístupu.

Ve výchozím nastavení modutils odmítne pokusy o použití modulu, který není vlastněn kořenem. Určení -r přepíše kontrolu a povolí kořenům načíst moduly, které nejsou vlastněny kořenem. Poznámka: Pokud je modutils nakonfigurován, může být výchozí hodnota pro kontrolu uživatele změněna.

Použití parametru -r k vypnutí kontroly kořenového adresáře nebo nastavení výchozí hodnoty na hodnotu "no root check" v době konfigurace je hlavní bezpečnostní expozice a nedoporučuje se.

-s , - syslog

Vyjměte vše pro syslog (3) namísto terminálu.

-S , --kallsyms

Vynucení načteného modulu, aby měl kallsyms data, i když to jádro nepodporuje. Tato volba je určena pro malé systémy, kde je jádro načteno bez dat kallsyms, ale vybrané moduly potřebují klingy pro ladění. Tato volba je výchozí na serveru Red Hat Linux.

-v , --verbose

Buďte verbózní.

-V , --version

Zobrazí verzi insmod .

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

Proveďte a nevyexportujte všechny externí symboly modulu. Výchozí hodnota je pro exporty symbolů. Tato volba je účinná pouze tehdy, pokud modul explicitně nevyexportuje vlastní řízenou tabulku symbolů a je tedy zastaralý.

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

Do a nepřidávejte ksyms symboly ksymoops . Tyto symboly jsou používány ksymoops k poskytnutí lepší ladění, pokud je v tomto modulu Oops. Výchozí hodnota je pro definice symbolů ksymoops . Tato volba je nezávislá na volbách -X / -x .

symboly ksymoops přidávají přibližně 260 bajtů na načtený modul. Pokud nejste opravdu zkráceni v prostoru jádra a snažíte se snížit ksyms na minimální velikost, použijte výchozí nastavení a získáte přesnější ladění Oops. symboly ksymoops jsou nutné pro ukládání přetrvávajících dat modulu.

-N , - Numerické pouze

Zkontrolujte pouze číselnou část verze modulu proti verzi jádra, tj ignorujte EXTRAVERSION při rozhodování o tom, zda modul patří do jádra. Tento příznak je automaticky nastaven na jádro 2.5 dále, je volitelný pro starší jádra.

Parametry modulu

Některé moduly akceptují parametry načítání a přizpůsobují jejich provoz. Tyto parametry jsou často I / O port a IRQ čísla, které se liší od stroje k počítači a nelze je určit z hardwaru.

V modulech postavených pro jádra řady 2.0 může být libovolný symbol celé značky nebo znakového ukazatele považován za parametr a upraven. Počínaje jádry řady 2.1 jsou symboly explicitně označeny jako parametry, takže mohou být změněny pouze určité hodnoty. Dále jsou uvedeny informace o typu pro kontrolu hodnot poskytnutých při zatížení.

V případě celých čísel mohou být všechny hodnoty v desítkové, osmičkové nebo hexadecimální a la C: 17, 021 nebo 0x11. Prvky pole jsou zadány sekvence oddělená čárkami. Prvky lze přeskočit vynecháním hodnoty.

V modulech řady 2.0 se hodnoty, které nezačínají číslem, považují za řetězce. Počínaje 2.1, informace o typu parametru udávají, zda má hodnota interpretovat jako řetězec. Pokud hodnota začíná dvojitými uvozovkami ( " ), řetězec je interpretován jako v C, únikové sekvence a všechny. Všimněte si, že z příkazového řádku shellu mohou být samotné uvozovky potřeba chránit před interpretací shellu.

Licencované moduly a symboly GPL

Počínaje jádrem 2.4.10 by moduly měly mít licenční řetězec definovaný pomocí MODULE_LICENSE () . Několik řetězců je rozpoznáno jako kompatibilní s GPL; jakýkoli jiný licenční řetězec nebo žádná licence vůbec neznamená, že se s modulem zachází jako s majetkem.

Pokud jádro podporuje příznak / proc / sys / kernel / tainted, pak bude při vkládání modulu bez licence GPL insmodovat OR poškozený příznak s '1'. Pokud jádro podporuje odbarvení a modul je načten bez licence, vydá se varování. Výstraha se vždy vydává pro moduly, které mají MODULE_LICENSE (), který není kompatibilní s GPL, a to ani na starších jádrech, které nepodporují poškozování. To minimalizuje varování při použití nových modutilů na starších jádrech.

insmod -f (síla) módu NEBO poraněný příznak s '2' na jádrech, které podporují odbarvení. Vždy vydává varování.

Někteří vývojáři jádra vyžadují, aby symboly vyexportované kódem používaly pouze moduly s licencí kompatibilní s licencí GPL. Tyto symboly jsou exportovány EXPORT_SYMBOL_GPL namísto normální EXPORT_SYMBOL . Pouze symboly GPL exportované jádrem a dalšími moduly jsou zobrazeny pouze pro moduly s licencí kompatibilní s GPL, tyto symboly se objeví v / proc / ksyms s prefixem ' GPLONLY_ '. insmod ignoruje předponu GPLONLY_ na symboly při načítání licencovaného modulu GPL, takže modul se vztahuje pouze na normální název symbolu bez předpony. Pouze symboly GPL nejsou zpřístupněny modulům bez licence kompatibilní s licencí GPL, a to včetně modulů bez licence vůbec.

Ksymoops Assistance

Chcete-li pomoci při ladění jádra. Jejda při používání modulů nezapomeňte přidat některé symboly do ksymů, viz možnost -Y . Tyto symboly začínají znakem __insmod_modulename_ . Pro vytvoření symbolů je nutné modulename . Je zákonné načíst stejný objekt více než jednou pod různými názvy modulů. V současné době jsou definované symboly:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile je název souboru, ze kterého byl objekt načten. To zajistí, že ksymoops mohou odpovídat kódu správnému objektu. mtime je poslední modifikovaná časová značka v tomto souboru v hexadecimálním směru, nula, pokud stav selhal. verze je jádrová verze, pro kterou byl modul kompilován, -1, pokud není k dispozici žádná verze. Symbol _O má stejnou počáteční adresu jako záhlaví modulu.

__insmod_modulename_Ssectionname_Llength

Tento symbol se objeví na začátku vybraných sekcí ELF, aktuálně .text, .rodata, .data, .bss a .sbss. Zobrazuje se pouze v případě, že má část nenulovou velikost. název oddílu je název oddílu ELF, délka je délka desetinné sekce. Tyto symboly pomáhají ksymoops mapovat adresy do sekcí, pokud nejsou k dispozici žádné symboly.

__insmod_modulename_Ppersistent_filename

Vytvořeno pouze pomocí modulu insmod, pokud má modul jeden nebo více parametrů, které jsou označeny jako trvalé údaje a je k dispozici název souboru pro ukládání přetrvávajících dat (viz -e , výše).

Dalším problémem s ladícím jádrem Jejda v modulech je, že obsah / proc / ksyms a / proc / modules se může změnit mezi Oopsem a při zpracování souboru protokolu. Chcete-li tento problém vyřešit, pokud existuje adresář / var / log / ksymoops , potom insmod a rmmod automaticky zkopírují / proc / ksyms a / proc / modules do / var / log / ksymoops s prefixem data +% Y% m % d% H% M% S '. Správce systému může říct ksymoops, které soubory snímků mají používat při ladění Oops. Pro automatickou kopii není zakázáno přepínání. Pokud nechcete, aby k němu došlo, nevytvářejte / var / log / ksymoops . Pokud tento adresář existuje, měl by být vlastněn root a be mode 644 nebo 600 a tento skript byste měli spouštět každý den nebo tak. Níže uvedený skript je instalován jako insmod_ksymoops_clean .

Základní informace, které je třeba znát

NÁZEV

insmod - nainstalujte modul pro načtení jádra

SYNOPSE

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