Alt om Linux/Unix-kommandoen: modprobe

De Linux-kjernen har vokst til et stort stykke programvare. På noen måter er det en god ting. I andre gjør det det noe lite fleksibelt. Løsningen er å dele deler av kjernen i moduler. Disse modulene kan lastes eller ikke, gitt datamaskinens konfigurasjon og dine behov. Modprobe-kommandoen laster nye kjernemoduler på et Linux-system, slik at du kan aktivere nye funksjoner og støtte uten omstart.

Portrett av ung arkitekt som bruker bærbar PC på et kontor
Westend61 / Getty Images

Bruker Modprobe

Modprobe er vanligvis enkel å bruke. Når du kjenner kjernemodulen du vil laste, send den til modprobe-kommandoen.

sudo modprobe rtl8723de

Det er alt som skal til. Modulen lastes inn til du starter systemet på nytt.

Hvis du vil fjerne en modul uten å starte på nytt, kjør kommandoen på nytt med -r flagg.

sudo modprobe -r rtl8723de

For det meste er det slik du vil jobbe med modprobe. For å finne ut mer, sjekk inn i den tekniske dokumentasjonen nedenfor.

Modprobe teknisk dokumentasjon

Modprobe-kommandoen utfører høynivåhåndtering av lastbare moduler.

Synopsis

modprobe [-adnqv] [-C konfig] modul [symbol=verdi ...] modprobe [-adnqv] [-C konfig] [-t type] mønster modprobe -l [-C konfig] [-t type] mønster modprobe -c [-C konfigmodprobe -r [-dnv] [-C konfig] [modul ...] modprobe -Vh.

Alternativer

-en, --alle

Last inn alle matchende moduler i stedet for å stoppe etter den første vellykkede lastingen.

-c, --showconfig

Vis gjeldende brukte konfigurasjon.

-C, --konfigkonfig

Bruk filen konfig i stedet for (det valgfrie) /etc/modules.conf for å spesifisere konfigurasjonen. Miljøvariabelen MODULECONF kan også brukes til å velge (og overstyre) en annen konfigurasjonsfil fra standard /etc/modules.conf (eller /etc/conf.modules som er avviklet).

Når miljøvariabel UNAME_MACHINE er satt, bruker modutils verdien i stedet for maskinfeltet fra uname() syscall. Dette er hovedsakelig nyttig når du kompilerer 64-bits moduler i et 32-biters brukerrom eller omvendt, sett UNAME_MACHINE til typen av moduler. Gjeldende moduler støtter ikke full cross-build-modus for moduler, det er begrenset til å velge mellom 32-bit og 64-bit versjoner av vertsarkitekturen.

-d, --feilsøke

Vis informasjon om den interne representasjonen av stabelen med moduler.

-h, --hjelp

Vis et sammendrag av alternativer og avslutt umiddelbart.

-k, --selvrens

Still inn autoclean på ladede moduler. Brukes av kjernen når den kaller på modprobe for å tilfredsstille en manglende funksjon (leveres som en modul). De -q alternativet er underforstått av -k. Disse alternativene sendes automatisk til insmod.

-n, --forestilling

Ikke utfør handlingen, vis bare hva som ville blitt gjort.

-q, --stille

Ikke klag på at insmod ikke klarer å installere en modul. Fortsett som normalt, men stille, med andre muligheter for modprobe å teste. Dette alternativet sendes automatisk til insmod.

-r, --ta bort

Fjern modul (stabler) eller gjør autoclean, avhengig av om det er noen moduler nevnt på kommandolinjen.

-s, --syslog

Rapporter via syslog i stedet for stderr. Dette alternativet sendes automatisk til insmod.

-tmodultype; --typemodultype

Vurder kun moduler av denne typen. modprobe ser bare på moduler hvis katalogbane inneholder nøyaktig /moduletype/. modultype kan inkludere mer enn ett katalognavn, for eksempel -tdrivere/nett viser moduler i xxx/drivers/net/ og dens underkataloger.

-v, --ordlig

Skriv ut alle kommandoer etter hvert som de utføres.

-V, --versjon

Vis versjonen av modprobe.

Modulnavn må ikke inneholde stier (nr /), og navnet kan heller ikke inneholde etterfølgende .o. For eksempel, slip er et gyldig modulnavn for modprobe, /lib/modules/2.2.19/net/slip og slip.o er ugyldige. Dette gjelder kommandolinjen og oppføringer i konfigurasjonen.

Beskrivelse av kommandoen

Modprobe og depmod-verktøyene er ment å gjøre en Linux-modulær kjerne mer håndterlig for brukere, administratorer og distribusjonsvedlikeholdere.

Modprobe bruker en Makefile-lignende avhengighetsfil, opprettet av depmod, for automatisk å laste de relevante modulene fra settet med moduler som er tilgjengelige i forhåndsdefinerte katalogtrær.

Modprobe brukes til å laste en enkelt modul, en stabel med avhengige moduler, eller alle moduler som er merket med en spesifisert tag.

Modprobe laster automatisk alle basismoduler som trengs i en modulstabel, som beskrevet av avhengighetsfilen modules.dep. Hvis lasting av en av disse modulene mislykkes, blir hele den gjeldende stabelen med moduler lastet i gjeldende økt ut automatisk.

Modprobe har to måter å laste moduler på. En måte (sondemodusen) vil prøve å laste en modul ut av en liste (definert av mønster). Modprobe stopper lasting så snart en modul laster inn. Dette kan brukes til å laste én Ethernet-driver automatisk ut av en liste. Den andre måten modprobe kan brukes på er å laste alle moduler fra en liste.

Med alternativet -r, laster modprobe automatisk ut en stabel med moduler, på samme måte som rmmod -r gjør. Bruker kun modprobe -r rydder opp ubrukte automatisk lastede moduler og utfører også kommandoene før og etter fjerning i konfigurasjonsfilen /etc/modules.conf.

Kombinere alternativene -l og -t viser alle tilgjengelige moduler av en bestemt type.

Alternativ -c skriver ut gjeldende konfigurasjon (standard + konfigurasjonsfil).

Konfigurasjon

Oppførselen til modprobe (og depmod) kan endres av den (valgfrie) konfigurasjonsfilen /etc/modules.conf. For en detaljert beskrivelse av hva denne filen kan inneholde, samt standardkonfigurasjonen som brukes av depmod og modprobe, se modules.conf(5).

Kommandoene før og etter fjerning utføres ikke hvis en modul blir autorenset av kerneld. Se etter den kommende støtten for vedvarende modullagring i stedet. Hvis du vil bruke funksjonene før og etter installasjon, slår du av autoclean for kerneld og setter i stedet noe sånt som følgende linje i crontab (dette brukes også for kmod-systemer) for å gjøre autoclean hver 2. minutter:

*/2 * * * * test -f /proc/modules && /sbin/modprobe -r

Strategi

Tanken er at modprobe vil se først i katalogen som inneholder moduler kompilert for den nåværende utgivelsen av kjernen. Hvis modulen ikke finnes der, ser modprobe i katalogen som er felles for kjerneversjonen (for eksempel 2.0, 2.2). Hvis modulen fortsatt ikke blir funnet, ser modprobe i katalogen som inneholder moduler etter en standardutgivelse, og så videre.

Når du installerer en ny Linux, skal modulene flyttes til en katalog relatert til utgivelsen (og versjonen) av kjernen du installerer. Deretter gjør du en symbolkobling fra denne katalogen til standardkatalogen.

Hver gang du kompilerer en ny kjerne, vil kommandoen lage modules_install oppretter en ny katalog, men vil ikke endre standardkoblingen.

Når du får en modul som ikke er relatert til kjernedistribusjonen, plasser den i en av de versjonsuavhengige katalogene under /lib/modules.

Dette er standardstrategien, som kan overstyres i /etc/modules.conf.

Eksempler

modprobe -t nett

Last inn en av modulene som er lagret i katalogen merket nett. Hver modul prøves til en lykkes.

modprobe -a -t oppstart

Alle moduler som er lagret i kataloger merket støvel er lastet.

modprobe slip

Dette forsøker å laste modulen slhc.o hvis den ikke tidligere var lastet siden slip-modulen trenger funksjonaliteten i slhc-modulen. Denne avhengigheten er beskrevet i filen modules.dep som ble opprettet automatisk av depmod.

modprobe -r slip

Dette avlaster slipmodulen. Den laster også ut slhc-modulen automatisk, med mindre den også brukes av en annen modul (for eksempel ppp).

Se også: depmod(8), lsmod (8), kerneld (8), ksyms (8), rmmod(8).

Sikkerhetsmodus

Hvis den effektive uid ikke er lik den virkelige uid, behandler modprobe innspillet med ekstrem mistenksomhet. Den siste parameteren behandles alltid som et modulnavn, selv om den begynner med -. Det kan bare være ett modulnavn og alternativer for skjemaet variabel=verdi er forbudt. Modulnavnet behandles alltid som en streng, ingen meta-utvidelse utføres i sikker modus. Meta-utvidelse brukes imidlertid på data som leses fra konfigurasjonsfilen.

euid er kanskje ikke lik uid når modprobe påkalles fra kjernen, dette er sant for kjerner 2.4.0-test11 og senere. I en ideell verden kunne modprobe stole på at kjernen bare sender gyldige parametere til modprobe. Imidlertid har minst én lokal rotutnyttelse skjedd fordi kjernekode på høyt nivå sendte ubekreftede parametere direkte fra brukeren til modprobe. Så modprobe stoler ikke lenger på kjerneinndata.

modprobe setter automatisk sikker modus når miljøet kun består av disse strengene.

HJEM=/
TERM=linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin

Dette oppdager kjøring av modprobe fra kjernen på kjernene 2.2 til og med 2.4.0-test11, selv om uid == euid, som den gjør på de tidligere kjernene.

Logge kommandoer

Hvis katalogen /var/log/ksymoops eksisterer og modprobe kjøres med et alternativ som kan laste eller slette en modul, modprobe logger kommandoen og returnerer statusen i /var/log/ksymoops/'date +%Y%m%d.log'. Det er ingen bryter for å deaktivere denne automatiske loggingen. Hvis du ikke vil at det skal skje, ikke opprett /var/log/ksymoops. Hvis den katalogen eksisterer, bør den eies av root og være modus 644 eller 600, og du bør kjøre skript insmod_ksymoops_clean hver dag eller så.

Nødvendige verktøy

depmod (8), insmod (8).

Bruke Mann kommando (% Mann) for å se hvordan en kommando brukes på datamaskinen.