Skip to content

Linux/Unix-opdracht: modprobe

1 de augustus de 2021
portrait of young architect using laptop in his office 499163955 57ec326e5f9b586c35bcd2c9

De Linux-kernel is uitgegroeid tot een groot stuk software. In zekere zin is dat een goede zaak. In andere maakt het het enigszins inflexibel. De oplossing is om delen van de kernel in modules te splitsen. Deze modules kunnen al dan niet worden geladen, afhankelijk van de configuratie van de computer en uw behoeften. De opdracht modprobe laadt nieuwe kernelmodules op een Linux-systeem, zodat u nieuwe functies en ondersteuning kunt inschakelen zonder opnieuw op te starten.

Modprobe gebruiken

Modprobe is meestal eenvoudig te gebruiken. Zodra u de kernelmodule kent die u wilt laden, geeft u deze door aan de opdracht modprobe. sudo modprobe rtl8723de

Dat is alles. De module wordt geladen totdat u uw systeem opnieuw opstart. Als u een module wilt verwijderen zonder opnieuw op te starten, voert u de opdracht opnieuw uit met de -R vlag. sudo modprobe -r rtl8723de

Voor het grootste deel is dit hoe u met modprobe zult werken. Raadpleeg de onderstaande technische documentatie voor meer informatie.

Modprobe technische documentatie

De opdracht modprobe voert verwerking op hoog niveau uit van laadbare modules.

Korte inhoud

modprobe [-adnqv] [-C config] module [symbol=value …] modprobe [-adnqv] [-C config] [-t type] patroon modprobe -l [-C config] [-t type] patroon modprobe -C [-C config] modprobe -R [-dnv] [-C config] [module …] modprobe -Vh

Opties

-een, –alle

Laad alle overeenkomende modules in plaats van te stoppen na het eerste succesvolle laden.

-C, –showconfig

Toon de momenteel gebruikte configuratie.

-C, –config configuratie

Gebruik het bestand configuratie in plaats van (de optionele) /etc/modules.conf om de configuratie te specificeren. De omgevingsvariabele MODULECONF kan ook worden gebruikt om een ​​ander configuratiebestand dan de standaard te selecteren (en te negeren) /etc/modules.conf (of /etc/conf.modules wat afgekeurd is). Wanneer omgevingsvariabele UNAME_MACHINE is ingesteld, gebruikt modutils zijn waarde in plaats van het machineveld uit de uname() syscall. Dit is vooral handig bij het compileren van 64-bits modules in een 32-bits gebruikersruimte of omgekeerd, set UNAME_MACHINE aan het type modules. De huidige modutils ondersteunt geen volledige cross-build-modus voor modules, het is beperkt tot het kiezen tussen 32-bits en 64-bits versies van de hostarchitectuur.

-NS, –debug

Toon informatie over de interne weergave van de stapel modules.

-H, –helpen

Geef een overzicht van de opties weer en sluit direct af.

-k, –automatische schoonmaak

Stel autoclean in op geladen modules. Gebruikt door de kernel wanneer het modprobe aanroept om te voldoen aan een ontbrekende functie (geleverd als een module). De -Q optie wordt geïmpliceerd door -k. Deze opties worden automatisch naar insmod gestuurd.

-N, –show

Voer de actie niet uit, laat alleen zien wat er zou worden gedaan.

-Q, –stil

Klaag niet dat insmod een module niet kan installeren. Ga door zoals normaal, maar stil, met andere mogelijkheden voor modprobe om te testen. Deze optie wordt automatisch naar insmod gestuurd.

-R, –verwijderen

Verwijder module (stacks) of voer autoclean uit, afhankelijk van of er modules worden vermeld op de opdrachtregel.

-s, –syslog

Rapporteer via syslog in plaats van stderr. Deze optie wordt automatisch naar insmod gestuurd.

-t moduletype; –type moduletype

Overweeg alleen modules van dit type. modprobe kijkt alleen naar modules waarvan het directorypad exact bevat: /moduletype/. moduletype kan meer dan één mapnaam bevatten, bijvoorbeeld -t stuurprogramma’s/net geeft modules weer in xxx/stuurprogramma’s/net/ en zijn submappen.

-v, –uitgebreid

Druk alle opdrachten af ​​zoals ze worden uitgevoerd.

-V, –versie

Geef de versie van modprobe weer. Modulenamen mogen geen paden bevatten (nee /), noch mag de naam de volgende bevatten .O. Bijvoorbeeld, uitglijden is een geldige modulenaam voor modprobe, /lib/modules/2.2.19/net/slip en slip.o zijn ongeldig. Dit geldt voor de opdrachtregel en voor vermeldingen in de config.

Beschrijving van de opdracht

De hulpprogramma’s modprobe en depmod zijn bedoeld om een ​​modulaire Linux-kernel beter beheersbaar te maken voor gebruikers, beheerders en beheerders van distributie. Modprobe gebruikt een Makefile-achtig afhankelijkheidsbestand, gemaakt door depmod, om automatisch de relevante modules te laden uit de set modules die beschikbaar zijn in vooraf gedefinieerde directorystructuren. Modprobe wordt gebruikt om een ​​enkele module, een stapel afhankelijke modules of alle modules te laden die zijn gemarkeerd met een gespecificeerde tag. Modprobe laadt automatisch alle benodigde basismodules in een modulestapel, zoals beschreven in het afhankelijkheidsbestand modules.dep. Als het laden van een van deze modules mislukt, wordt de hele huidige stapel modules die in de huidige sessie is geladen automatisch verwijderd. Modprobe heeft twee manieren om modules te laden. Een manier (de sondemodus) zal proberen een module uit een lijst te laden (gedefinieerd door patroon). Modprobe stopt met laden zodra een module succesvol is geladen. Dit kan worden gebruikt om één Ethernet-stuurprogramma uit een lijst automatisch te laden. De andere manier waarop modprobe kan worden gebruikt, is om alle modules uit een lijst te laden. Met de optie -R, modprobe ontlaadt automatisch een stapel modules, vergelijkbaar met de manier waarop rmmod -r doet. Alleen gebruiken modprobe -r ruimt ongebruikte automatisch geladen modules op en voert ook de pre- en post-remove-opdrachten uit in het configuratiebestand /etc/modules.conf. De opties combineren -l en -t geeft alle beschikbare modules van een bepaald type weer. Keuze -C drukt de momenteel gebruikte configuratie af (standaard + configuratiebestand).

Configuratie

Het gedrag van modprobe (en depmod) kan worden gewijzigd door het (optionele) configuratiebestand /etc/modules.conf. Voor een gedetailleerde beschrijving van wat dit bestand kan bevatten, evenals de standaardconfiguratie die wordt gebruikt door depmod en modprobe, zie modules.conf(5). De pre- en post-remove-commando’s worden niet uitgevoerd als een module automatisch wordt opgeschoond door kerneld. Zoek in plaats daarvan naar de aanstaande ondersteuning voor permanente moduleopslag. Als je de functies voor en na de installatie wilt gebruiken, schakel dan autoclean voor kerneld uit en plaats in plaats daarvan zoiets als de volgende regel in crontab (dit wordt ook gebruikt voor kmod-systemen) om elke 2 minuten autoclean uit te voeren: */2 * * * * test -f /proc/modules && /sbin/modprobe -r

Strategie

Het idee is dat modprobe eerst zal kijken in de directory met modules die zijn gecompileerd voor de huidige release van de kernel. Als de module daar niet wordt gevonden, zoekt modprobe in de map die gebruikelijk is voor de kernelversie (bijvoorbeeld 2.0, 2.2). Als de module nog steeds niet wordt gevonden, zoekt modprobe in de directory met modules naar een standaardrelease, enzovoort. Wanneer je een nieuwe Linux installeert, moeten de modules worden verplaatst naar een map die gerelateerd is aan de release (en versie) van de kernel die je installeert. Voer vervolgens een symbolische koppeling uit van deze map naar de standaardmap. Elke keer dat je een nieuwe kernel compileert, wordt het commando make modules_install maakt een nieuwe map aan, maar verandert de standaardlink niet. Als je een module krijgt die niet gerelateerd is aan de kerneldistributie, plaats deze dan in een van de versie-onafhankelijke mappen onder /lib/modules. Dit is de standaardstrategie, die kan worden overschreven in /etc/modules.conf.

Voorbeelden

modprobe -t net

Laad een van de modules die zijn opgeslagen in de directory die is getagd netto-. Elke module wordt geprobeerd totdat er één slaagt.

modprobe -a -t boot

Alle modules die zijn opgeslagen in mappen die zijn getagd laars zijn geladen.

modprobe slip

Dit probeert de module te laden slhc.o als het niet eerder is geladen, omdat de slipmodule de functionaliteit in de slhc-module nodig heeft. Deze afhankelijkheid wordt beschreven in het bestand modules.dep die automatisch is gemaakt door depmod.

modprobe -r slip

Hierdoor wordt de slipmodule ontladen. Het ontlaadt de slhc-module ook automatisch, tenzij deze ook door een andere module wordt gebruikt (bijvoorbeeld ppp).

Zie ook: depmod(8), lsmod(8), kerneld(8), ksyms(8), rmmod(8).

Veilige modus

Als de effectieve uid niet gelijk is aan de echte uid, behandelt modprobe zijn invoer met extreme argwaan. De laatste parameter wordt altijd behandeld als een modulenaam, zelfs als deze begint met . Er kan slechts één modulenaam en opties van het formulier zijn variabele=waarde zijn verboden. De modulenaam wordt altijd behandeld als een string, er wordt geen meta-uitbreiding uitgevoerd in de veilige modus. Er wordt echter meta-uitbreiding toegepast op gegevens die uit het configuratiebestand worden gelezen. euid is mogelijk niet gelijk aan uid wanneer modprobe wordt aangeroepen vanuit de kernel, dit geldt voor kernels 2.4.0-test11 en later. In een ideale wereld zou modprobe erop kunnen vertrouwen dat de kernel alleen geldige parameters aan modprobe doorgeeft. Er is echter ten minste één lokale root-exploit opgetreden omdat kernelcode op hoog niveau niet-geverifieerde parameters rechtstreeks van de gebruiker aan modprobe heeft doorgegeven. Dus modprobe vertrouwt niet langer kernel-invoer. modprobe stelt automatisch de veilige modus in wanneer de omgeving alleen uit deze strings bestaat HOME=/
TERM=linux
PATH=/sbin:/usr/sbin:/bin:/usr/bin

Dit detecteert de uitvoering van modprobe vanuit de kernel op kernels 2.2 en 2.4.0-test11, zelfs als uid == euid, wat het doet op de eerdere kernels.

Opdrachten loggen

Als de map /var/log/ksymoops bestaat en modprobe wordt uitgevoerd met een optie die een module kan laden of verwijderen, modprobe logt zijn opdracht en retourneert de status in /var/log/ksymoops/’datum +%Y%m%d.log’. Er is geen schakelaar om deze automatische logging uit te schakelen, als je niet wilt dat het gebeurt, maak dan niet aan /var/log/ksymoops. Als die map bestaat, moet deze eigendom zijn van root en modus 644 of 600 zijn en moet u script uitvoeren insmod_ksymoops_clean elke dag of zo.

Vereiste hulpprogramma’s

depmod(8), insmod(8). Gebruik de Mens commando (% Mens) om te zien hoe een opdracht op uw computer wordt gebruikt.