Comandă Linux / Unix: insmod

Insula Linux / Unix instalează un modul încărcabil în kernelul care rulează. insmod încearcă să conecteze un modul la kernelul care rulează rezolvând toate simbolurile din tabelul de simboluri exportat al kernelului.

Dacă numele fișierului modulului este dat fără directoare sau extensie, insmod va căuta modulul în unele directoare implicite comune. Variabila de mediu MODPATH poate fi utilizată pentru a înlocui această valoare implicită. Dacă există un fișier de configurare a modulelor, cum ar fi /etc/modules.conf , acesta va suprascrie căile definite în MODPATH .

Variabila de mediu MODULECONF poate fi, de asemenea, utilizată pentru a selecta un alt fișier de configurare din /etc/modules.conf (sau /etc/conf.modules (deprecated)). Această variabilă de mediu va suprascrie toate definițiile de mai sus.

Când variabila de mediu UNAME_MACHINE este setată, modutils va folosi valoarea sa în locul câmpului mașinii din sistemul sonycount (). Acest lucru este în principal de utilizare atunci când se compilează module pe 64 de biți în spațiul de utilizator pe 32 de biți sau invers, setați UNAME_MACHINE la tipul de module. Modulele actuale nu acceptă modul de încrucișare completă pentru module, ci se limitează la a alege între versiunile de 32 și 64 de biți ale arhitecturii gazdă.

Opțiuni

-e persist_name , --persist = persist_name

Specifică unde vor fi citite date persistente ale modulului de la încărcare și vor fi scrise atunci când această instanțiere a modulului este descărcată. Această opțiune este tăcut ignorată dacă modulul nu are date persistente. Datele persistente sunt citite numai de insmod dacă această opțiune este prezentă, în mod implicit insmod nu procesează date persistente.

Ca formă scurtă , "e" (un șir gol) este interpretată de insmod ca valoarea persistdir definită în modules.conf , urmată de numele fișierului modulului față de calea de căutare a modulului în care a fost descoperită, minus orice trailing ".gz", ".o" sau ".mod". Dacă module.conf specifică " persistdir = " (adică persistdir este un câmp gol), atunci această formă de stenogramă este tăcut ignorată. (Consultați module.conf (5).)

-f , --force

Încercați să încărcați modulul chiar dacă versiunea kernelului care rulează și versiunea kernelului pentru care a fost compilat modulul nu se potrivesc. Acest lucru suprascrie doar verificarea versiunii kernel-ului, nu are efect asupra verificării numelor de simboluri. Dacă numele simbolurilor din modul nu se potrivesc cu kernelul, atunci nu există nicio modalitate de a forța insmodul să încarce modulul.

-h , --help

Afișați un rezumat al opțiunilor și ieșiți imediat.

-k , --autoclean

Setați pavilionul de auto-curățare pe modul. Acest steguleț va fi utilizat de kerneld (8) pentru a elimina modulele care nu au fost utilizate într-o anumită perioadă de timp - de obicei un minut.

-L , - blochează

Utilizați turma (2) pentru a împiedica încărcarea simultană a aceluiași modul.

-m , --map

Efectuați o hartă de încărcare pe stdout, facilitând depanarea modulului în caz de panică a kernel-ului.

-n , --noload

Dumneavoastră fugiți, faceți totul, cu excepția încărcării modulului în kernel. Dacă este solicitat de către un -m sau -O , rularea va produce un fișier hartă sau blob. Deoarece modulul nu este încărcat, adresa reală de încărcare a kernelului este necunoscută, astfel încât fișierul map și blob se bazează pe o adresă de încărcare arbitrară de 0x12340000.

-o modul_name , --name = nume_produs

Explicați numele de modul, mai degrabă decât derivarea numele de la numele de bază al fișierului obiect sursă.

-O blob_name , --blob = numele barei

Salvați obiectul binar în blob_name . Rezultatul este o bobină binară (fără anteturi ELF) care arată exact ce este încărcat în kernel după manipularea și relocarea secțiunii. Opțiunea -m este recomandată pentru a obține o hartă a obiectului.

-p , -probe

Verificați modulul pentru a vedea dacă acesta ar putea fi încărcat cu succes . Aceasta include localizarea fișierului obiect în calea modulului, verificarea numerelor de versiune și rezolvarea simbolurilor. Nu verifică relocările și nici nu produce o hartă sau un fișier blob.

-P prefix , --prefix = prefix

Această opțiune poate fi utilizată cu modulele versate pentru un kernel SMP sau bigmem, deoarece astfel de module au un prefix suplimentar adăugat în numele lor de simboluri. Dacă nucleul a fost construit cu versiuni de simboluri, atunci insmod va extrage automat prefixul de la definiția "get_module_symbol" sau "inter_module_get", dintre care una trebuie să existe în orice kernel care acceptă module. Dacă nucleul nu are versiuni de simboluri, dar modulul a fost construit cu versiuni de simboluri, atunci utilizatorul trebuie să furnizeze -P .

-q , - calm

Nu imprimați o listă a simbolurilor nerezolvate. Nu vă plângeți de nepotrivirea versiunii. Problema se va reflecta numai în starea de ieșire a insmodului .

-r , - rădăcină

Unii utilizatori compilează modulele sub un utilizator non-root, apoi instalează modulele ca root. Acest proces poate lăsa modulele deținute de userid non-root, chiar dacă directorul de module este deținut de root. Dacă utilizatorul non-root este compromis, un intrus poate suprascrie modulele existente deținute de acel userid și poate folosi această expunere pentru a accesa bootstrap până la accesul root.

În mod implicit, modutils va respinge încercările de a utiliza un modul care nu este deținut de root. Specificarea -r va schimba verificarea și va permite ca root să încarce module care nu sunt deținute de root. Notă: valoarea implicită pentru verificarea rădăcinilor poate fi modificată când modutils este configurat.

Utilizarea lui -r pentru a dezactiva verificarea root sau setarea implicită la "no root check" la timpul de configurare este o expunere importantă la securitate și nu este recomandată.

-s , - syslog

Efectuați totul la syslog (3) în loc de terminal.

-S , - kalsyms

Forțați modulul încărcat să aibă date kallsyms , chiar dacă kernelul nu îl acceptă. Această opțiune este pentru sistemele mici în care kernel-ul este încărcat fără date kallsyms, dar modulele selectate au nevoie de kallsyms pentru depanare. Această opțiune este implicită pentru Red Hat Linux.

-v , --verbose

Fii serios.

-V , --versiune

Afișați versiunea insmod .

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

Faceți și nu exportați toate simbolurile externe ale modulului respectiv. Valoarea prestabilită este pentru simbolurile care urmează să fie exportate. Această opțiune este eficientă numai dacă modulul nu exportă în mod explicit propriul tabel de simboluri controlate și, prin urmare, este depreciat.

-Y , --yyyops ; -y , -noksymoops

Faceți și nu adăugați simbolurile ksymoops la ksyms. Aceste simboluri sunt folosite de ksymoops pentru a oferi o depanare mai bună dacă există un Oops în acest modul. Valoarea prestabilită este pentru ca simbolurile ksymoops să fie definite. Această opțiune este independentă de opțiunile -X / -x .

simbolurile ksymoops adaugă aproximativ 260 octeți pe modul de încărcare. Cu excepția cazului în care sunteți într-adevăr scurt pe spațiul kernel-ului și încercați să reduceți ksyms la dimensiunea minimă a acestuia, luați implicit și obțineți mai exactă Oops debugging. simbolurile ksymoops sunt necesare pentru a salva datele modulelor persistente.

-N , - Numeroase

Verificați numai partea numerică a versiunii modulului împotriva versiunii kernel-ului, adică ignorați EXTRAVERSION-ul atunci când decideți dacă un modul aparține unui kernel. Acest steag este setat automat pentru kernelul 2.5, este opțional pentru kernelurile anterioare.

Module Parameters

Unele module acceptă parametrii de încărcare pentru a personaliza funcționarea acestora. Acești parametri sunt adesea numere de port I / O și numere IRQ care variază de la mașină la mașină și nu pot fi determinate de hardware.

În modulele construite pentru kernel-urile din seria 2.0, orice simbol indicator întreg sau caracter poate fi tratat ca parametru și modificat. Începând din kernelurile din seria 2.1, simbolurile sunt marcate explicit ca parametri, astfel încât numai valorile specifice pot fi modificate. În plus, sunt furnizate informații de tip pentru verificarea valorilor furnizate la momentul încărcării.

În cazul numerelor întregi, toate valorile pot fi în zecimal, octal sau hexazecimal a la C: 17, 021 sau 0x11. Elementele matricei sunt specificate secvență separate prin virgule. Elementele pot fi ignorate prin omiterea valorii.

În modulele din seria 2.0, valorile care nu încep cu un număr sunt considerate șiruri de caractere. Începând cu 2.1, informația de tip a parametrului indică dacă să interpreteze valoarea ca un șir. Dacă valoarea începe cu citate dublă ( " ), șirul este interpretat ca și în secvențele de evacuare C și toate. Rețineți că din promptul shell, citatele pot fi protejate de interpretarea shell-ului.

Module și simboluri licențiate GPL

Începând cu kernelul 2.4.10, modulele ar trebui să aibă un șir de licențe, definit folosind MODULE_LICENSE () . Mai multe șiruri sunt recunoscute ca fiind compatibile cu GPL; orice alt șir de licență sau nicio licență nu înseamnă că modulul este tratat drept proprietar.

Dacă kernel-ul acceptă pavilionul / proc / sys / kernel / tainted , atunci insmod va SAU flagul pătat cu '1' atunci când încărcați un modul fără licență GPL. Se emite un avertisment dacă kernelul suportă tentarea și un modul este încărcat fără licență. Se emite întotdeauna un avertisment pentru modulele care au un MODULE_LICENSE () care nu este compatibil cu GPL, chiar și pentru nucleele mai vechi care nu acceptă tentarea. Acest lucru minimizează avertismentele atunci când se utilizează un modutils nou pe nucleele mai vechi.

modul insmod -f (forță) va fi SAU steagul pătat cu "2" pe kernelurile care suportă decolorarea. Ea întotdeauna emite un avertisment.

Unii dezvoltatori de kerneluri solicită ca simbolurile exportate prin codul lor să fie utilizate numai de module cu licență compatibilă cu GPL. Aceste simboluri sunt exportate de EXPORT_SYMBOL_GPL în loc de EXPORT_SYMBOL normal. Simbolurile GPL exportate de kernel și de alte module sunt vizibile numai pentru modulele cu licență compatibilă cu GPL, aceste simboluri apar în / proc / ksyms cu prefixul " GPLONLY_ ". insmod ignoră prefixul GPLONLY_ pe simboluri în timpul încărcării unui modul GPL licențiat, astfel încât modulul se referă doar la numele simbolului normal, fără prefix. Simbolurile GPL nu sunt puse la dispoziția modulelor fără o licență compatibilă GPL, acestea includ module fără licență.

Asistență Ksymoops

Pentru a asista la depanarea kernelului Oops când utilizați module, insuziți implicit la adăugarea unor simboluri la ksyms, consultați opțiunea -Y . Aceste simboluri încep cu __insmod_modulename_ . Modulul este necesar pentru a face simbolurile unice. Este legal să încărcați același obiect mai mult decât o dată sub diferite nume de module. În prezent, simbolurile definite sunt:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile este numele fișierului căruia a fost încărcat obiectul. Acest lucru asigură că ksymoops poate potrivi codul cu obiectul corect. mtime este ultimul timestamp modificat pe acel fișier în hex, zero dacă statul a eșuat. este versiunea kernelului pentru care a fost compilat modulul, -1 dacă nu este disponibilă nicio versiune. Simbolul _O are aceeași adresă de start ca și antetul modulului.

__insmod_modulename_Ssectionname_Llength

Acest simbol apare la începutul secțiunilor ELF selectate, în prezent .text, .rodata, .data, .bss și .sbss. Apare numai dacă secțiunea are o dimensiune diferită de zero. sectionname este numele secțiunii ELF, lungimea este lungimea secțiunii în zecimal. Aceste simboluri ajută la ksymoops adresele de hartă în secțiuni atunci când nu sunt disponibile simboluri.

__insmod_modulename_Ppersistent_filename

Numai creat de insmod dacă modulul are unul sau mai mulți parametri marcați ca date persistente și un nume de fișier pentru a salva date persistente (a se vedea -e , de mai sus) este disponibil.

Cealaltă problemă cu kernelul de depanare Oops în module este că conținutul / proc / ksyms și / proc / modules se poate schimba între Oops și când procesați fișierul jurnal. Pentru a ajuta la depășirea acestei probleme, dacă directorul / var / log / ksymoops există, atunci insmod și rmmod vor copia automat / proc / ksyms și / proc / modules în / var / log / ksymoops cu prefixul 'date +% % d% H% M% s`. Administratorul de sistem poate spune ksymoops care fișiere instantanee de utilizat la depanarea unui Oops. Nu există comutator pentru a dezactiva această copie automată. Dacă nu doriți să apară, nu creați / var / log / ksymoops . Dacă acest director există, ar trebui să fie deținut de root și be mode 644 sau 600 și ar trebui să executați acest script în fiecare zi sau cam asa ceva. Scriptul de mai jos este instalat ca insmod_ksymoops_clean .

Informații de bază de știut

NUME

insmod - instalați modulul kernel încărcabil

REZUMAT

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