Komanda Linux / Unix: insmod

Komanda Linux / Unix insmod instalon një modul të ngarkueshëm në kernel drejtimin. insmod përpiqet të lidhë një modul në kernel duke zgjidhur të gjitha simbolet nga tabela e simbolit të eksportuar të kernelit.

Nëse emri i skedarit të modulit jepet pa drejtori ose zgjerim, insmod do të kërkojë modulin në disa drejtori të zakonshme default. Varianti i mjedisit MODPATH mund të përdoret për të anashkaluar këtë parazgjedhur. Nëse ekziston një skedar i konfigurimit të modulit si /etc/modules.conf , ajo do të anashkalojë shtigjet e përcaktuara në MODPATH .

Varianti i mjedisit MODULECONF gjithashtu mund të përdoret për të zgjedhur një skedar të konfigurimit të ndryshëm nga modeli i paracaktuar /etc/modules.conf (ose /etc/conf.modules (deprecated)). Kjo ndryshore e mjedisit do të mbizotërojë të gjitha definicionet e mësipërme.

Kur variabli i mjedisit UNAME_MACHINE është vendosur, modutils do të përdorë vlerën e saj në vend të fushës së makinës nga sistemi uname (). Kjo është kryesisht e përdorur kur përpiloni modulet 64-bitë në hapësirën 32-bit të përdoruesit ose anasjelltas, vendosni UNAME_MACHINE në llojin e moduleve. Modutils aktuale nuk mbështesin mënyrën e plotë të ndërthurjes për module, por është e kufizuar në zgjedhjen midis versioneve 32 dhe 64-bit të arkitekturës pritëse.

Opsione

-e persist_name , --persist = persist_name

Specifikon se ku të dhënat e vazhdueshme për modulin lexohen nga ngarkesa dhe shkruhen kur ky instancacion i modulit është shkarkuar. Ky opsion hyn silently nëse moduli nuk ka të dhëna të vazhdueshme. Të dhënat e vazhdueshme lexohen vetëm nga insmod nëse ky opsion është i pranishëm, në parim insmod nuk përpunon të dhëna të vazhdueshme.

Si një formë stenografike , -e "" (një varg i zbrazët) interpretohet nga insmod si vlerë e persistdir siç përcaktohet në modules.conf , e ndjekur nga emri i skedarit të modulit në lidhje me rrugën e kërkimit të modulit në të cilin është gjetur, zvarritës ".gz", ".o" ose ".mod". Nëse modules.conf përcakton " persistdir = " (dmth. Persistdir është një fushë e zbrazët) atëherë kjo formë e stenografisë hyn në heshtje. (Shihni modules.conf (5).)

-f , --force

Tentoni të ngarkoni modulin edhe nëse versioni i kernelit drejtues dhe versioni i kernelit për të cilin është përpiluar moduli nuk përputhen. Kjo vetëm anashkalon kontrollin e versionit të kernelit, nuk ka efekt në kontrollet e emrave simbol. Nëse emrat e simboleve në modul nuk përputhen me kernel atëherë nuk ka asnjë mënyrë për të detyruar insmod të ngarkojë modulin.

-h , - ndihmë

Shfaqni një përmbledhje të opsioneve dhe dalin menjëherë.

-k , --autoclean

Vendosni flamurin auto-pastër në modul. Ky flamur do të përdoret nga kerneld (8) për të hequr modulet që nuk janë përdorur në një periudhë kohore - zakonisht një minutë.

-L , - mbyll

Përdorni kopenë (2) për të parandaluar ngarkesat e njëkohshme të të njëjtit modul.

-m , --map

Prodhoni një hartë të ngarkesës në stdout, duke e bërë më të lehtë debugimin e modulit në rast të një paniku kernel.

-n , - jo

Dummy drejtuar, të bëjë çdo gjë përveç ngarkesës modulin në kernel. Nëse kërkohet nga një -m ose -O , programi do të prodhojë një hartë ose skedar blob. Pasi që moduli nuk është i ngarkuar, adresa reale e ngarkesës së kernelit është e panjohur, kështu që harta dhe skeda blob bazohen në një adresë të ngarkesës arbitrare prej 0x12340000.

-o module_name , --name = module_name

Emërtoni në mënyrë të qartë modulin, në vend që të nxjerrni emrin nga emri bazë i skedarit të objektit burimor.

-O blob_name , --blob = blob_name

Ruaj objektin binar në blob_name . Rezultati është një blob binar (nuk ka koka ELF) që tregon saktësisht se çfarë është ngarkuar në kernel pas manipulimit të seksionit dhe zhvendosjes. Opsioni -m rekomandohet për të marrë një hartë të objektit.

-p , --probe

Provoni modulin për të parë nëse mund të jetë ngarkuar me sukses . Kjo përfshin gjetjen e skedarit të objektit në rrugën e modulit, duke kontrolluar numrat e versioneve dhe zgjidhjen e simboleve. Nuk kontrollon zhvendosjet dhe as nuk prodhon skedar hartë ose blob.

-P prefix , --prefix = prefiks

Ky opsion mund të përdoret me module të versionuara për një SMP ose kernel bigmem, meqë këto module kanë një shtesë shtesë të shtuar në emrat e tyre të simboleve. Nëse kerneli është ndërtuar me versione simbolike atëherë insmod automatikisht do të nxjerrë prefiksin nga përkufizimi i "get_module_symbol" ose "inter_module_get", njëri prej të cilave duhet të ekzistojë në çdo kernel që mbështet modulet. Nëse kerneli nuk ka versione simbol, por moduli është ndërtuar me versione simbol atëherë përdoruesi duhet të furnizojë -P .

-q , - qetë

Mos shtypni një listë të simboleve të pazgjidhura. Mos ankoheni për mospërputhjen e versionit. Problemi do të pasqyrohet vetëm në statusin e daljes së insmod .

-r , - rrënjë

Disa përdorues përpilojnë module nën një përdorues jo-rrënjësor pastaj instaloni modulet si rrënjë. Ky proces mund të lërë modulet në pronësi të përdoruesit jo-root, edhe pse direktoria e moduleve është pronë e rrënjës. Nëse përdoruesi i jo-rrënjëve është i komprometuar, një ndërhyrës mund të mbishkruajë modulet ekzistuese të zotëruara nga ai përdorues dhe të përdorin këtë ekspozim për të nisur deri në qasjen rrënjësore.

By default, modutils do të refuzojë përpjekjet për të përdorur një modul që nuk është pronë e rrënjës. Specifikimi i -r do të ndryshojë kontrollin dhe të lejojë rrënjë të ngarkojë module që nuk janë pronë e rrënjës. Shënim: vlera e parazgjedhur për kontrollin e rrënjës mund të ndryshohet kur modutils është konfiguruar.

Përdorimi i -r për të çaktivizuar kontrollimin e rrënjës ose vendosjen e parazgjedhur në "asnjë kontroll rrënjësor" në kohën e konfigurimit është një ekspozim i rëndësishëm i sigurisë dhe nuk rekomandohet.

-s , - syslog

Dërgo gjithçka në syslog (3) në vend të terminalit.

-S , - kallsyms

Forconi modulin e ngarkuar që të ketë të dhëna kallsyms , edhe nëse kerneli nuk e mbështet atë. Ky opsion është për sistemet e vogla ku kerneli është i ngarkuar pa të dhëna kallsyms , por modulet e zgjedhura kanë nevojë për klesyms për debugging. Ky opsion është parazgjedhje në Red Hat Linux.

-v , --verbose

Ji i përhapur.

-V , --version

Shfaq versionin e insmod .

-X , - eksport ; -x , - jo eksport

Bëni dhe mos eksportoni të gjitha simbolet e jashtme të modulit. Parazgjedhja është që simbolet të eksportohen. Ky opsion është i efektshëm vetëm nëse moduli nuk eksportohet eksplicitisht në tabelën e simbolit të kontrolluar të saj dhe kështu është i vjetruar.

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

Bëni dhe mos shtoni simbolet ksymoops tek ksyms. Këto simbole përdoren nga ksymoops për të siguruar debugging më të mirë nëse ka një Oops në këtë modul. Parazgjedhja është për përcaktimin e simboleve ksymoops . Ky opsion është i pavarur nga opsionet -X / -x .

ksymoops simbolet shtojnë afërsisht 260 bytes për modul të ngarkuar. Nëse nuk jeni me të vërtetë i shkurtër në hapësirën e kernelit dhe po përpiqeni të reduktoni ksyms në madhësinë e saj minimale, të marrë parazgjedhjen dhe të merrni më shumë saktësi Oops debugging. Simbolet ksymoops janë të nevojshme për të ruajtur të dhënat e vazhdueshme të modulit.

-N , - vetëm me numra

Vetëm kontrolloni pjesën numerike të versionit të modulit kundrejt versionit të kernelit, dmth. Injoroni EXTRAVERSION kur vendosni nëse një modul i përket një kerneli. Ky flamur vendoset automatikisht për kernel 2.5 më tej, është fakultative për kernelet më herët.

Parametrat e Modulit

Disa module pranojnë parametrat e kohës së ngarkesës për të rregulloje funksionimin e tyre. Këto parametra janë shpesh port I / O dhe numra IRQ që ndryshojnë nga makina në makinë dhe nuk mund të përcaktohen nga hardueri.

Në modulet e ndërtuara për kernelet e serive 2.0, çdo simbol tregues i numrit të plotë ose të karakterit mund të trajtohet si një parametër dhe modifikohet. Duke filluar nga kernelet e serive 2.1, simbolet shënohen në mënyrë eksplicite si parametra në mënyrë që vetëm vlerat specifike të mund të ndryshohen. Për më tepër, informacioni i tipit ofrohet për të kontrolluar vlerat e dhëna në kohën e ngarkesës.

Në rastin e numrave të plotë, të gjitha vlerat mund të jenë në decimal, oktal ose heksadecimal a la C: 17, 021 ose 0x11. Elementet e grumbullimit përcaktohen me sekuencë të ndara me presje. Elementet mund të anashkalohen duke mos përmendur vlerën.

Në modulet e serive 2.0, vlerat që nuk fillojnë me një numër konsiderohen strings. Duke filluar në 2.1, informacioni i tipit të parametrit tregon nëse do të interpretohet vlera si një varg. Nëse vlera fillon me kuotat e dyfishta ( " ), vargu interpretohet si në C, sekuencat e shpëtimit dhe të gjitha. Vëreni se nga shpejtësia e shell, kuotat mund të kenë nevojë të mbrohen nga interpretimi i shell.

Modulet dhe simbolet e licencuara nga GPL

Duke filluar me kernel 2.4.10, modulet duhet të kenë një varg licence, të përcaktuar duke përdorur MODULE_LICENSE () . Disa vargje njihen si të pajtueshme me GPL-in; çdo varg tjetër licence ose asnjë licencë nuk do të thotë se moduli trajtohet si i pronarit.

Nëse kerneli mbështet / proc / sys / kernel / flamurin e ndotur atëherë insmod do OR flamurin e njollosur me '1' kur ngarkon një modul pa leje GPL. Një paralajmërim lëshohet nëse kerneli mbështet mbytjen dhe një modul është ngarkuar pa leje. Një paralajmërim gjithmonë lëshohet për modulet që kanë një MODULE_LICENSE () që nuk është në përputhje me GPL, madje edhe në kernelet më të vjetër që nuk mbështesin prishjen. Kjo minimizon paralajmërimet kur një modutils i ri përdoret në kernelet më të vjetër.

modaliteti insmod -f (forca) do të jetë ose flamuri i njollosur me '2' në kernel që mbështesin prishjen. Gjithnjë lëshon një paralajmërim.

Disa zhvillues kernel kërkojnë që simbolet e eksportuara nga kodi i tyre duhet të përdoren vetëm nga modulet me licencë të përputhshme me GPL. Këto simbole eksportohen nga EXPORT_SYMBOL_GPL në vend të EXPORT_SYMBOL normale. Simbolet GPL të eksportuara nga kerneli dhe nga module të tjera janë të dukshme vetëm për modulet me licencë të pajtueshme me GPL, këto simbole shfaqen në / proc / ksyms me një prefiks të ' GPLONLY_ '. insmod injoron prefiksin GPLONLY_ mbi simbolet gjatë ngarkimit të një moduli të licencuar të GPL kështu që moduli i referohet vetëm emrit të simbolit normal, pa prefiksin. GPL vetëm simbolet nuk janë vënë në dispozicion të moduleve pa një licencë të pajtueshme GPL, kjo përfshin module pa licencë në të gjitha.

Ndihmë Ksymoops

Për të ndihmuar me debugging e kernel Oops kur përdorni module, insmod defaults për të shtuar disa simbole të ksyms, shih -Y opsion. Këto simbole fillojnë me __insmod_modulename_ . Emri i modulit është i nevojshëm për t'i bërë simbolet unike. Është e ligjshme të ngarkosh të njëjtin objekt më shumë se një herë nën emra të ndryshëm të moduleve. Aktualisht, simbolet e përcaktuara janë:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile është emri i skedarit ku u ngarkua objekti. Kjo siguron që ksymoops mund të përputhen me kodin në objektin e saktë. mtime është koha e fundit e ndryshuar e modifikimit në atë skedë në magji, zero nëse stat dështoi. versioni është versioni i kernelit që është hartuar moduli, -1 nëse nuk ka asnjë version. Simboli _ ka të njëjtën adresë fillimi si header moduli.

__insmod_modulename_Ssectionname_Llength

Ky simbol shfaqet në fillim të seksioneve ELF të zgjedhura, aktualisht .text, .rodata, .data, .bss dhe .sbss. Shfaqet vetëm nëse seksioni ka një madhësi jo-zero. sectionname është emri i seksionit ELF, gjatësia është gjatësia e seksionit në decimal. Këto simbole ndihmojnë ksymoops që të mapojnë adresat tek seksionet kur nuk ka simbole në dispozicion.

__insmod_modulename_Ppersistent_filename

E krijuar vetëm nga insmod nëse moduli ka një ose më shumë parametra që janë shënuar si të dhëna të vazhdueshme dhe një emër filmi për të ruajtur të dhënat e vazhdueshme (shih -e , më sipër) është në dispozicion.

Problemi tjetër me debugging kernel Oops në module është se përmbajtja e / proc / ksyms dhe / proc / module mund të ndryshojë midis Oops dhe kur ju përpunoni log file. Për të kapërcyer këtë problem, nëse ekziston directory / var / log / ksymoops atëherë insmod dhe rmmod automatikisht do të kopjojnë / proc / ksyms dhe / proc / module/ var / log / ksymoops me një prefiks të datës +% Y% m % d% H% M% s`. Administratori i sistemit mund t'i tregojë ksymoops cilat skedarë të skanimit të përdorin kur debugojnë një Oops. Nuk ka ndërprerje për të çaktivizuar këtë kopje automatike. Nëse ju nuk dëshironi që kjo të ndodhë, mos krijoni / var / log / ksymoops . Nëse ekziston dokumenti i tillë, duhet të jetë pronë e rrënjës dhe të jetë modaliteti 644 ose 600 dhe duhet të ekzekutosh këtë skript çdo ditë apo më shumë. Skenari më poshtë është instaluar si insmod_ksymoops_clean .

Informacione themelore për të ditur

NAME

insmod - install modul kernel loadable

PËRMBLEDHJE

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o module_name ] [-O blob_name ] [-P prefix ] moduli [ simbol = vlera ...]