Linux / Unix Command: insmod

Ang Linux / Unix command insmod ay nag- install ng loadable module sa running kernel. sinusubukan ng insmod na i-link ang isang module sa tumatakbo na kernel sa pamamagitan ng paglutas ng lahat ng mga simbolo mula sa talahanayan na na-export na simbolo ng kernel.

Kung ang module na pangalan ng file ay ibinigay nang walang mga direktoryo o extension, ang insmod ay maghanap para sa module sa ilang karaniwang mga default na direktoryo. Ang variable ng MODPATH sa kapaligiran ay maaaring gamitin upang i-override ang default na ito. Kung ang isang configuration module ng file tulad ng /etc/modules.conf ay umiiral, ito ay sasapaw sa mga landas na tinukoy sa MODPATH .

Ang variable ng modyul MODULECONF ay maaari ring magamit upang pumili ng ibang file ng pagsasaayos mula sa default /etc/modules.conf (o /etc/conf.modules (hindi na ginagamit)). Ang variable ng kapaligiran na ito ay papatayin ang lahat ng mga kahulugan sa itaas.

Kapag naka -set ang variable ng UNEXMACHINE na kapaligiran, gagamitin ng modutils ang halaga nito sa halip na field ng makina mula sa uname () syscall. Ito ay pangunahin nang ginagamit kapag pinagsasama mo ang 64-bit na mga module sa 32-bit na espasyo ng gumagamit o kabaligtaran, itakda ang UNAME_MACHINE sa uri ng mga module. Ang kasalukuyang modutils ay hindi sumusuporta sa buong cross build mode para sa mga module, limitado ito sa pagpili sa pagitan ng 32- at 64-bit na bersyon ng architecture ng host.

Mga Opsyon

-e persist_name , --persist = persist_name

Tinutukoy kung saan ang anumang paulit-ulit na data para sa module ay mabasa mula sa pag-load at nakasulat sa kapag ang instantiation ng module ay diskargado. Ang pagpipiliang ito ay tahimik na hindi pinansin kung ang module ay walang paulit-ulit na data. Ang patuloy na data ay binabasa lamang ng insmod kung ang pagpipiliang ito ay naroroon, sa pamamagitan ng default insmod ay hindi nagpoproseso ng persistent data.

Bilang isang shorthand form , -e "" (isang walang laman na string) ay binigyang-kahulugan ng insmod bilang halaga ng persistdir gaya ng nilinaw sa modules.conf , kasunod ng filename ng module na may kaugnayan sa module na paghahanap ng path na natagpuan sa, minus anumang trailing ".gz", ".o" o ".mod". Kung ang modules.conf ay tumutukoy sa " persistdir = " (ibig sabihin ang persistdir ay isang walang laman na patlang) kung gayon ang porma ng shorthand ay tahimik na hindi pinansin. (Tingnan ang modules.conf (5).)

-f , --force

Subukan ang pag-load ng module kahit na ang bersyon ng tumatakbo na kernel at ang bersyon ng kernel na kung saan ang module ay naipon ay hindi tumutugma. Pinapalitan lamang nito ang checking ng kernel version, wala itong epekto sa mga tseke ng pangalan ng simbolo. Kung ang mga pangalan ng simbolo sa module ay hindi tumutugma sa kernel pagkatapos ay walang paraan upang pilitin ang insmod na i-load ang module.

-h , --help

Magpakita ng buod ng mga pagpipilian at agad na lumabas.

-k , --autoclean

Itakda ang auto-clean flag sa module. Ang bandila na ito ay gagamitin ng kerneld (8) upang tanggalin ang mga module na hindi pa ginagamit sa ilang tagal ng panahon - karaniwang isang minuto.

-L , - lock

Gamitin ang kawan (2) upang mapigilan ang sabay-sabay na naglo-load ng parehong module.

-m , --map

Output isang mapa ng load sa stdout, na ginagawang mas madaling i-debug ang module sa kaganapan ng kernel panic.

-n , --noload

Dummy run, gawin ang lahat maliban sa load ang module sa kernel. Kung hiniling ng isang -m o -O , ang run ay makakagawa ng isang mapa o patak na file. Dahil ang module ay hindi na-load, ang real kernel load address ay hindi kilala kaya ang mapa at patak ng file ay batay sa isang arbitrary na address ng pagkarga ng 0x12340000.

-o module_name , --name = module_name

Malinaw na pangalanan ang module, sa halip na deriving ang pangalan mula sa base na pangalan ng source file ng source.

-O blob_name , --blob = blob_name

I-save ang binary na bagay sa blob_name . Ang resulta ay isang binary blob (walang ELF header) na nagpapakita ng eksakto kung ano ang na-load sa kernel pagkatapos ng pagmamanipula ng seksyon at paglilipat. Ang opsiyon -m ay inirerekomenda upang makakuha ng isang mapa ng bagay.

-p , --probe

Suriin ang module upang makita kung maaari itong matagumpay na ikinarga . Kabilang dito ang paghahanap ng object file sa path ng module, pagsuri ng mga numero ng bersyon, at paglutas ng mga simbolo. Hindi nito sinisiyasat ang mga relocation o hindi ito gumagawa ng isang mapa o patak na file.

-P prefix , --prefix = prefix

Ang pagpipiliang ito ay maaaring gamitin sa mga bersyon ng modyul para sa SMP o bigmem kernel, dahil ang mga modyul na ito ay may dagdag na prefix na idinagdag sa kanilang mga pangalan ng simbolo. Kung ang kernel ay binuo na may mga bersyon ng simbolo pagkatapos insmod ay awtomatikong kunin ang prefix mula sa kahulugan ng "get_module_symbol" o "inter_module_get", ang isa ay dapat na umiiral sa anumang kernel na sumusuporta sa mga module. Kung ang kernel ay walang mga bersyon ng simbolo ngunit ang module ay binuo na may mga bersyon ng simbolo pagkatapos ay dapat na supply ng user -P .

-q , --quiet

Huwag mag-print ng isang listahan ng anumang hindi malutas na mga simbolo. Huwag magreklamo tungkol sa mismatch na bersyon. Ang problema ay makikita lamang sa exit status ng insmod .

-r , - ugat

Ang ilang mga gumagamit ay sumulat ng mga module sa ilalim ng isang non-root userid pagkatapos ay i-install ang mga modulo bilang root. Maaaring iwanan ng prosesong ito ang mga module na pag-aari ng hindi gumagamit ng root, kahit na ang direktoryo ng modules ay pag-aari ng root. Kung ang kompromiso ng hindi-ugat ay nakompromiso, maaaring i-overwrite ng nanghihimasok ang mga umiiral na module na pag-aari ng userid na iyon at gamitin ang pagkakalantad sa bootstrap hanggang sa root access.

Sa pamamagitan ng default, ang mga modutils ay tatanggihan sa mga pagtatangka na gumamit ng isang module na hindi pag-aari ng ugat. Ang pagtutukoy -r ay magpalipat-lipat sa tseke at pahintulutan ang ugat na mag-load ng mga module na hindi pagmamay-ari ng ugat. Tandaan: maaaring baguhin ang default na halaga para sa root check kapag naka-configure ang mga modutil.

Paggamit ng -r upang huwag paganahin ang pagsuri ng root o pagtatakda ng default sa "walang pag-check sa root" sa oras ng pagsasaayos ay isang pangunahing pagkakalantad sa seguridad at hindi inirerekomenda.

-s , - syslog

Output lahat sa syslog (3) sa halip ng terminal.

-S , --kalaysay

Pwersahin ang module na puno upang magkaroon ng data ng kallsyms , kahit na hindi sinusuportahan ito ng kernel. Ang pagpipiliang ito ay para sa mga maliliit na sistema kung saan ang kernel ay na-load nang walang kallsyms data ngunit napiling mga module na kailangan kallsyms para sa pag-debug. Ang pagpipiliang ito ay ang default sa Red Hat Linux.

-v , - ooose

Maging masyado.

-V , - pagbabalik-loob

Ipakita ang bersyon ng insmod .

-X , --Export ; -x , --noexport

Gawin at huwag i-export ang lahat ng panlabas na mga simbolo ng module, ayon sa pagkakabanggit. Ang default ay para ma-export ang mga simbolo. Ang pagpipiliang ito ay epektibo lamang kung ang module ay hindi malinaw na nag-export ng sarili nitong kontroladong talahanayan ng simbolo, at sa gayon ay hindi na ginagamit.

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

Gawin at huwag magdagdag ng mga simbolo ng ksymoops sa ksyms. Ang mga simbolo na ito ay ginagamit ng mga ksymoops upang magbigay ng mas mahusay na debugging kung mayroong isang Oops sa modyul na ito. Ang default ay para sa tinukoy na mga simbolo ng ksymoops . Ang pagpipiliang ito ay malaya sa mga opsyon na -X / -x .

Ang mga simbolo ng ksymoops ay nagdaragdag ng humigit-kumulang na 260 byte sa bawat load module. Maliban kung ikaw ay talagang maikli sa espasyo ng kernel at sinusubukan na mabawasan ang ksyms sa pinakamababang sukat nito, kunin ang default at makakuha ng mas tumpak na Oops debugging. Kinakailangan ang mga ksymoops simbolo upang i-save ang paulit-ulit na data ng module.

-N , --numeric-only

Suriin lamang ang numerong bahagi ng bersyon ng module laban sa bersyon ng kernel, ie huwag pansinin ang EXTRAVERSION kapag nagpapasya kung ang isang module ay kabilang sa isang kernel. Ang bandila na ito ay awtomatikong itinakda para sa kernel 2.5 pataas, ito ay opsyonal para sa naunang mga kernels.

Mga Parameter ng Module

Ang ilang mga module ay tumatanggap ng mga parameter ng load-time upang i-customize ang kanilang operasyon. Ang mga parameter na ito ay madalas na I / O port at mga numero ng IRQ na nag-iiba mula sa makina patungo sa makina at hindi maaaring matukoy mula sa hardware.

Sa mga module na binuo para sa 2.0 serye kernels, anumang simbolo ng integer o character na pointer ay maaaring gamutin bilang isang parameter at binago. Simula sa mga serye ng 2.1 serye, ang mga simbolo ay malinaw na minarkahan bilang mga parameter upang ang mga tukoy na halaga lamang ay maaaring mabago. Higit pa rito, ang uri ng impormasyon ay ibinigay para sa pagsusuri sa mga halagang ibinigay sa oras ng pagkarga.

Sa kaso ng mga integer, ang lahat ng mga halaga ay maaaring nasa decimal, octal o hexadecimal isang la C: 17, 021 o 0x11. Ang mga sangkap ng array ay tinukoy na pagkakasunod-sunod na pinaghihiwalay ng mga kuwit. Ang mga elemento ay maaaring lumaktaw sa pamamagitan ng pag-aalis ng halaga.

Sa 2.0 module na serye, ang mga halaga na hindi nagsisimula sa isang numero ay itinuturing na mga string. Simula sa 2.1, ang uri ng impormasyon ng parameter ay nagpapahiwatig kung kahulugan ang halaga bilang isang string. Kung ang halaga ay nagsisimula sa double-quotes ( " ), ang string ay binibigyang kahulugan bilang sa C, makatakas sa mga pagkakasunud-sunod at lahat. Gawin tandaan na mula sa prompt ng shell, ang mga quotes na kanilang sarili ay kailangang protektado mula sa interpretasyon ng shell.

GPL Licensed Modules and Symbols

Simula sa kernel 2.4.10, ang mga module ay dapat magkaroon ng lisensya na string, na tinukoy gamit ang MODULE_LICENSE () . Maraming mga string ay kinikilala bilang pagiging tugmang GPL; anumang iba pang mga lisensya string o walang lisensya sa lahat ng paraan na ang module ay itinuturing bilang pagmamay-ari.

Kung sinusuportahan ng kernel ang / proc / sys / kernel / tainted na flag pagkatapos ang insmod ay O ang maruming bandila na may '1' kapag naglo-load ng isang module na walang lisensya ng GPL. Ang isang babala ay inisyu kung ang kernel ay sumusuporta sa malupit at ang isang module ay puno ng walang lisensya. Ang isang babala ay palaging ibinibigay para sa mga module na may MODULE_LICENSE () na hindi katugma ng GPL, kahit na sa mga mas lumang kernels na hindi sumusuporta sa malupit. Binabawasan nito ang mga babala kapag ang isang bagong modutils ay ginagamit sa mas lumang mga kernels.

Ang pwersa ng insmod -f (puwersa) ay O ang may-kulay na bandila na may '2' sa mga kernels na sumusuporta sa malupit. Palaging nagbabala ito ng isang babala.

Kinakailangan ng ilang mga developer ng kernel na ang mga simbolo na na-export sa pamamagitan ng kanilang code ay dapat lamang gamitin ng mga module na may lisensyang GPL na may katugma. Ang mga simbolo na ito ay nai-export ng EXPORT_SYMBOL_GPL sa halip ng normal na EXPORT_SYMBOL . Ang mga simbolo lamang ng GPL na na-export ng kernel at ng iba pang mga module ay makikita lamang sa mga module na may isang lisensyang GPL-katugmang, ang mga simbolo na ito ay lumitaw sa / proc / ksyms na may prefix ng ' GPLONLY_ '. hindi isinasaalang - alang ng insmod ang prefix ng GPLONLY_ sa mga simbolo habang naglo-load ng isang lisensyang module ng GPL upang ang module ay tumutukoy lamang sa normal na pangalan ng simbolo, nang walang prefix. Ang mga simbolo lamang ng GPL ay hindi ginawang magagamit sa mga module na walang lisensya ng GPL na may tugma, kabilang dito ang mga module na walang lisensya sa lahat.

Ksymoops Assistance

Upang tulungan ang pag-debug ng kernel Oops kapag gumagamit ng mga module, ang mga default ay idaragdag ang ilang mga simbolo sa ksyms, tingnan ang -Y na opsyon. Ang mga simbolo na ito ay nagsisimula sa __insmod_modulename_ . Kinakailangan ang modulename upang gawing kakaiba ang mga simbolo. Legal na i-load ang parehong bagay nang higit sa isang beses sa ilalim ng iba't ibang mga pangalan ng module. Sa kasalukuyan, ang tinukoy na mga simbolo ay:

__insmod_modulename_Oobjectfile_Mmtime_Vversion

objectfile ang pangalan ng file na na-load mula sa object. Tinitiyak nito na ang mga ksymoops ay maaaring tumugma sa code sa tamang bagay. Ang mtime ay ang huling binagong timestamp sa file na iyon sa hex, zero kung nabigo ang stat. bersyon ay ang bersyon ng kernel na ang module ay pinagsama para sa, -1 kung walang bersyon ay magagamit. Ang _O simbolo ay may parehong pagsisimula address bilang module header.

__insmod_modulename_Ssectionname_Llength

Lumilitaw ang simbolo na ito sa simula ng napiling mga seksyon ng ELF, kasalukuyang .text, .rodata, .data, .bs at .sbss. Lilitaw lamang ito kung ang seksyon ay may di-zero na sukat. Ang seksyon ng pangalan ay ang pangalan ng seksyon ng ELF, haba ang haba ng seksyon sa decimal. Ang mga simbolo na ito ay tumutulong sa mga address ng ksymoops na mapa sa mga seksyon kung walang mga simbolo ang magagamit.

__insmod_modulename_Ppersistent_filename

Lamang na nilikha ng insmod kung ang module ay may isa o higit pang mga parameter na minarkahan bilang persistent data at isang filename upang i-save ang persistent data (tingnan -e , sa itaas) ay magagamit.

Ang iba pang problema sa debugging kernel Oops sa mga module ay ang mga nilalaman ng / proc / ksyms at / proc / modules ay maaaring magbago sa pagitan ng mga Oops at kapag pinoproseso mo ang log file. Upang makatulong sa pagtagumpayan ang problemang ito, kung ang direktoryo / var / log / ksymoops ay umiiral, ang insmod at rmmod ay awtomatikong kumopya / proc / ksyms at / proc / modules sa / var / log / ksymoops na may prefix ng `date +% Y% m % d% H% M% s`. Ang tagapangasiwa ng system ay maaaring magsabi ng ksymoops kung saan ang mga snapshot file na gagamitin kapag nag-debug ng isang Oops. Walang lumipat upang huwag paganahin ang awtomatikong kopya na ito. Kung hindi mo nais na mangyari ito, huwag gumawa / var / log / ksymoops . Kung mayroong umiiral na direktoryo, dapat itong pag-aari ng root at maging mode 644 o 600 at dapat mong patakbuhin ang script na ito araw-araw o kaya. Ang script sa ibaba ay naka-install bilang insmod_ksymoops_clean .

Pangunahing Impormasyon upang Malaman

NAME

insmod - i-install ang loadable kernel module

SINOPSIS

insmod [-fhkLmnpqrsSvVxXyYN] [-e persist_name ] [-o module_name ] [-O blob_name ] [-P prefix ] module [ symbol = value ...]