Linux / Unix naredba: insmod

Komanda Linux / Unix insmod instalira modul koji se može učitati u pokretačkom jezgru. insmod pokušava da poveže modul u kernel koji radi, rešavajući sve simbole iz tabele sa simbolima ekspozicije kernela.

Ako se ime datoteke modula daje bez direktorija ili ekstenzija, insmod će tražiti modul u nekim zajedničkim direktorijima. Promena okruženja MODPATH se može koristiti za prevazilaženje ove podrazumevane vrednosti. Ako postoji datoteka konfiguracije modula kao što je /etc/modules.conf , ona će prevazići putanje definisane u MODPATH-u .

Varijabla okruženja MODULECONF se također može koristiti za odabir različite konfiguracione datoteke od podrazumevanih /etc/modules.conf (ili /etc/conf.modules (zastarjela)). Ova varijabla okoline će prevazići sve gore navedene definicije.

Kada je postavljena varijabla okoline UNAME_MACHINE , modutils će koristiti svoju vrijednost umjesto polja mašine iz uname () syscall-a. Ovo se uglavnom koristi kada kompajlirate 64-bitne module u 32-bitni korisnički prostor ili obratno, podesite UNAME_MACHINE na tip modula. Trenutni moduli ne podržavaju režim potpunog ukrštanja modula, ograničen je na izbor između 32- i 64-bitnih verzija arhitekture domaćina.

Opcije

-e persist_name , -persist = persist_name

Određuje gdje se bilo koji uporni podaci za modul čitaju od prilikom učitavanja i upisuju se kada je ova instancacija modula istovarena. Ova opcija je tiho zanemarena ako modul nema uporne podatke. Persistentne podatke pročita samo insmod ako je ova opcija prisutna, podrazumevano insmod ne obrađuje uporne podatke.

Kao stenografski oblik , -e "" (prazan string) se tumači insmod-om kao vrijednost persistdir kao što je definisano u modules.conf , a zatim slijedi naziv fajla modula u odnosu na putanju za pretragu modula u koju je pronađen, minus bilo koji zaokružujući ".gz", ".o" ili ".mod". Ako modules.conf navodi " persistdir = " (tj. Persistdir je prazno polje), onda je ovaj stenični obrazac tiho zanemaren. (Pogledajte modules.conf (5).)

-f , -force

Pokušaj učitavanja modula čak i ako se verzija tekućeg jezgra i verzija kernela za koju je modul sastavljena ne poklapaju. Ovo samo preklapa proveru verzija jezgre, nema uticaja na proveru imena simbola. Ako se imena simbola u modulu ne poklapaju sa jezgrom, onda nema načina da se insmod učini za učitavanje modula.

-h , - pomoć

Prikažite rezime opcija i odmah izađite.

-k , - autoklean

Postavite zastavicu za auto-čišćenje na modulu. Ova zastava će koristiti kerneld (8) za uklanjanje modula koji nisu korišćeni u određenom vremenskom periodu - obično jedan minut.

-L , - zaključaj

Koristite jato (2) kako biste sprečili istovremena opterećenja istog modula.

-m , --map

Izađite mapu opterećenja na stdout, što olakšava debagovanje modula u slučaju panike kernela.

-n , -noljno

Dummy run, uradi sve osim što učitaj modul u kernel. Ako to zatraži -m ili -O , run će proizvesti mapu ili blob datoteku. Pošto modul nije učitan, stvarna adresa za učitavanje kernela je nepoznata, tako da se mapa i blob datoteka baziraju na proizvoljnoj adresi opterećenja od 0x12340000.

-o module_name , --name = module_name

Eksplicitno nazovite modul, umjesto da izvodite ime iz osnovnog imena izvorne datoteke datoteke.

-O blob_name , --blob = blob_name

Sačuvaj binarni objekt u blob_name . Rezultat je binarni blob (bez ELF zaglavlja) koji pokazuje tačno ono što se učitava u jezgru nakon manipulacije i premeštanja odseka. Opcija -m se preporučuje za dobijanje mape objekta.

-p , --probe

Ispitajte modul da biste videli da li je moguće uspešno učitati . Ovo uključuje lociranje datoteke objekta na putanju modula, provjeru brojeva verzije i rješavanje simbola. Ne provjerava selidbe niti daje mapu ili blob datoteku.

-P prefiks , --prefix = prefiks

Ova opcija se može koristiti sa verzionisanim modulima za SMP ili bigmem kernel, jer takvi moduli imaju dodatni prefiks u njihovim imenima simbola. Ako je kernel izgrađen sa simbol verzijama, insmod će automatski izvući prefiks iz definicije "get_module_symbol" ili "inter_module_get", od kojih jedan mora da postoji u bilo kom jezgru koji podržava modul. Ako kernel nema verzije simbola, ali modul je napravljen sa verzijama simbola, onda korisnik mora da isporučuje -P .

-q , - pitanja

Ne štampajte listu nerešenih simbola. Nemojte se žaliti zbog neusaglašenosti verzija. Problem će se reflektovati samo u statusu izlaska insmoda .

-r , - root

Neki korisnici kompajliraju module pod nekorijenskim korisničkim ID-om, zatim instaliraju module kao root. Ovaj proces može ostaviti module u vlasništvu nekorijenskog korisnika, iako je direktorijum modula u vlasništvu root-a. Ako je korisnik koji nije korijen kompromitovan, uljez može prepisati postojeće module u vlasništvu tog korisnika i koristiti ovu ekspoziciju za bootstrap do root pristupa.

Podrazumevano, modutils će odbaciti pokušaje korištenja modula koji nije u vlasništvu root-a. Određivanje -r će prebaciti provjeru i omogućiti rootu učitavanje modula koji nisu u vlasništvu root-a. Napomena: podrazumevana vrednost za proveru korena može se promeniti kada se konfigurišu modutils.

Korišćenje -r da onemogućite proveru korena ili podesite podrazumevano na "bez korijenske provjere" u vrijeme konfiguracije je glavna sigurnosna ekspozicija i ne preporučuje se.

-s , - syslog

Izlazite sve na syslog (3) umesto na terminal.

-S , --kallsyms

Napunite učitan modul da ima podatke o kaluđelima , čak i ako je jezgro ne podržava. Ova opcija je za male sisteme u kojima se kernel učitava bez podataka o kaliamsima, ali izabrani moduli zahtevaju kallsyms za debugging. Ova opcija je podrazumevana na Red Hat Linuxu.

-v , --verbose

Budite glupi.

-V , - verzija

Prikazati verziju insmoda .

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

Uradite i ne izvozite sve spoljne simbole modula, respektivno. Podrazumevano je da se simboli izvoze. Ova opcija je efikasna samo ako modul eksplicitno ne izvoze sopstvenu tablicu sa kontroliranim simbolima i stoga je zastarjela.

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

Uradite i ne dodajte ksymoops simbole u ksyms. Ove simbole koriste ksymoops da bi se obezbedilo bolje otklanjanje grešaka ako postoji Uops u ovom modulu. Podrazumevano je da se definišu simboli ksymoops-a . Ova opcija je nezavisna od opcija -X / -x .

simboli ksymoops-a dodaju približno 260 bajtova po učitanom modulu. Osim ako ste stvarno kratki u kernel-u i pokušavate da smanjite ksyms na svoju minimalnu veličinu, preuzmite podrazumevano i dobiti preciznije Oops debugging. ksymoops simboli su potrebni da bi se sačuvali uporan podaci modula.

-N , - samo za numeričke

Proverite samo brojčanu verziju modula protiv verzije kernela, odnosno ignorišite EXTRAVERSION prilikom odlučivanja da li modul pripada jedru. Ova zastava se automatski podešava za jezgru 2.5 i dalje, opcionalna je za ranije jezgre.

Parametri modula

Neki moduli prihvataju parametre opterećenja za prilagođavanje njihovog rada. Ovi parametri su često I / O port i IRQ brojevi koji se razlikuju od mašine do mašine i ne mogu se odrediti od hardvera.

U modulima izgrađenim za jezgre serije 2.0, bilo koji integer ili simbol pokazivač znakova mogu se tretirati kao parametar i modificirati. Počevši od jezgra 2.1 serije, simboli su eksplicitno označeni kao parametri, tako da se mogu menjati samo određene vrijednosti. Pored toga, obezbeđeni su i podaci o tipu za proveru vrednosti date u vreme učitavanja.

U slučaju celih brojeva, sve vrijednosti mogu biti u decimalnim, oktalnim ili heksadecimalnim a la C: 17, 021 ili 0x11. Elementi matrice su određene sekvence odvojene zapovijima. Elementi se mogu preskočiti ispuštanjem vrijednosti.

U modulima serije 2.0, vrednosti koje ne počinju sa brojem smatraju se žicama. Počevši od 2.1, informacije o tipu parametra ukazuju na to da li je vrijednost interpretirana kao niz. Ako vrednost počinje dvostrukim navodnicima ( " ), niz se tumači kao u C, escape sekvence i sve. Imajte na umu da se iz shell prompta, sami citati možda trebaju zaštititi od tumačenja shell-a.

GPL licencirani moduli i simboli

Počevši od kernela 2.4.10, moduli bi trebali imati niz licenci, definisani koristeći MODULE_LICENSE () . Nekoliko žica se prepoznaje kao GPL kompatibilne; bilo koji drugi niz licence ili licenca uopće ne znači da se modul tretira kao vlasnički.

Ako kernel podržava zastavicu / proc / sys / kernel / tainted, insmod će ILI označiti zastoj sa '1' prilikom učitavanja modula bez GPL licence. Upozorenje se izdaje ako kernel podržava tintiranje i modul se učitava bez dozvole. Upozorenje se uvek izdaje za module koji imaju MODULE_LICENSE () koji nije GPL kompatibilan, čak i kod starijih jezgara koje ne podržavaju tainting. Ovo smanjuje upozorenja kada se novi modutils koriste na starijim jezgrima.

režim insmod -f (sila) će ILI označiti zastoj sa '2' na jezgri koji podržavaju tainting. Uvek izdaje upozorenje.

Neki programeri jezgra zahtevaju da simboli koji se izvoze po njihovom kodu mogu koristiti samo moduli sa GPL kompatibilnom licencom. Ove simbole izvozi EXPORT_SYMBOL_GPL umesto normalne EXPORT_SYMBOL-a . Simboli samo GPL-a, koji izvoze kernel i drugi moduli, vidljivi su samo na modulima sa GPL kompatibilnom licencom, ovi simboli se pojavljuju u / proc / ksyms sa prefiksom ' GPLONLY_ '. insmod ignoriše prefiks GPLONLY_ na simbolima prilikom učitavanja GPL licencnog modula tako da se modul odnosi samo na normalno ime simbola, bez prefiksa. Samo simboli GPL-a nisu dostupni modulima bez GPL kompatibilne licence, to uključuje module bez licence.

Ksymoops Assistance

Da biste pomogli u debagovanju kernela Uopće , kada koristite module, insmod podrazumijeva dodavanje nekih simbola ksyms-u, pogledajte opciju -Y . Ovi simboli počinju sa __insmod_modulename_ . Modul imena je potreban da simboli budu jedinstveni. Legalni je učitavanje istog objekta više od jednom pod različitim imenima modula. Trenutno su definisani simboli:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile je ime datoteke od kojeg je objekat učitan. Ovo osigurava da ksymoops mogu odgovarati kodu ispravnom objektu. mtime je poslednji modifikovani vremenski žig u datoteci u hexu, nula ako stat nije uspio. verzija je verzija kernela za koju je modul sakupljen, -1 ako nijedna verzija nije dostupna. _O simbol ima istu početnu adresu kao zaglavlje modula.

__insmod_modulename_Ssectionname_Llength

Ovaj simbol se pojavljuje na početku izabranih ELF sekcija, trenutno .text, .rodata, .data, .bss i .sbss. Pojavljuje se samo ako sekcija ima nultu veličinu. sectionname je naziv sekcije ELF, dužina je dionice u decimalnom dijelu. Ovi simboli pomažu adresama mape ksymoops-a na odeljcima kada nema simbola.

__insmod_modulename_Ppersistent_filename

Stvorio je samo insmod ako modul ima jedan ili više parametara koji su označeni kao uporan podatak i ime datoteke za čuvanje upornih podataka (vidi -e , gore).

Drugi problem s kernelom debaganja Oops u modulima je da se sadržaj / proc / ksyms i / proc / modula može promijeniti između Oops i kada obrađujete datoteku dnevnika. Da bi prevazišli ovaj problem, ako postoji direktorijum / var / log / ksymoops onda insmod i rmmod automatski kopiraju / proc / ksyms i / proc / modules u / var / log / ksymoops sa prefiksom datuma +% Y% m % d% H% M% S. Sistemski administrator može reći ksymoops koje datoteke snimanja mogu koristiti prilikom otklanjanja Oops. Ne postoji prekidač za onemogućavanje ove automatske kopije. Ako ne želite da se to desi, ne kreirajte / var / log / ksymoops . Ako taj direktorij postoji, trebalo bi da bude u vlasništvu root-a i da bude mod 644 ili 600 i trebate pokrenuti ovu skriptu svakog dana ili slično. Skript ispod je instaliran kao insmod_ksymoops_clean .

Osnovne informacije za znanje

NAME

insmod - instaliraj modul kernela koji se može ubaciti

SYNOPSIS

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o module_name ] [-O blob_name ] [-P prefiks ] modul [ simbol = vrednost ...]