Zoeken op website

Hoe kernelmodules in Linux te laden en te verwijderen


Een kernelmodule is een programma dat op verzoek in de kernel kan worden geladen of daaruit kan worden verwijderd, zonder de kernel noodzakelijkerwijs opnieuw te compileren of het systeem opnieuw op te starten, en is bedoeld om de functionaliteit van de kernel te verbeteren.

In algemene softwaretermen lijken modules min of meer op plug-ins voor software zoals WordPress. Plug-ins bieden middelen om de softwarefunctionaliteit uit te breiden. Zonder plug-ins zouden ontwikkelaars één enorme software moeten bouwen met alle functionaliteiten geïntegreerd in een pakket. Als er nieuwe functionaliteiten nodig zijn, moeten deze in nieuwe versies van software worden toegevoegd.

Op dezelfde manier zou de kernel zonder modules moeten worden gebouwd met alle functionaliteiten rechtstreeks in het kernelimage geïntegreerd. Dit zou betekenen dat we grotere kernels moeten hebben, en systeembeheerders zouden de kernel opnieuw moeten compileren elke keer dat er nieuwe functionaliteit nodig is.

Een eenvoudig voorbeeld van een module is een apparaatstuurprogramma – waarmee de kernel toegang kan krijgen tot een hardwarecomponent/apparaat dat op het systeem is aangesloten.

Voorgesteld leesvoer: Hoe kom je erachter welke versie van Linux je gebruikt

Maak een lijst van alle geladen kernelmodules in Linux

In Linux eindigen alle modules met de extensie .ko en worden ze normaal gesproken automatisch geladen als de hardware wordt gedetecteerd bij het opstarten van het systeem. Een systeembeheerder kan de modules echter beheren met behulp van bepaalde commando's.

Om alle momenteel geladen modules in Linux weer te geven, kunnen we de opdracht lsmod (lijst modules) gebruiken, die de inhoud van /proc/modules op deze manier leest.

lsmod
Module                  Size  Used by
rfcomm                 69632  2
pci_stub               16384  1
vboxpci                24576  0
vboxnetadp             28672  0
vboxnetflt             28672  0
vboxdrv               454656  3 vboxnetadp,vboxnetflt,vboxpci
bnep                   20480  2
rtsx_usb_ms            20480  0
memstick               20480  1 rtsx_usb_ms
btusb                  45056  0
uvcvideo               90112  0
btrtl                  16384  1 btusb
btbcm                  16384  1 btusb
videobuf2_vmalloc      16384  1 uvcvideo
btintel                16384  1 btusb
videobuf2_memops       16384  1 videobuf2_vmalloc
bluetooth             520192  29 bnep,btbcm,btrtl,btusb,rfcomm,btintel
videobuf2_v4l2         28672  1 uvcvideo
videobuf2_core         36864  2 uvcvideo,videobuf2_v4l2
v4l2_common            16384  1 videobuf2_v4l2
videodev              176128  4 uvcvideo,v4l2_common,videobuf2_core,videobuf2_v4l2
intel_rapl             20480  0
x86_pkg_temp_thermal    16384  0
media                  24576  2 uvcvideo,videodev
....

Hoe kernelmodules in Linux te laden en te verwijderen

Om een kernelmodule te laden, kunnen we de opdracht insmod (insert module) gebruiken. Hier moeten we het volledige pad van de module opgeven. Met het onderstaande commando wordt de module speedstep-lib.ko ingevoegd.

insmod /lib/modules/4.4.0-21-generic/kernel/drivers/cpufreq/speedstep-lib.ko 

Om een kernelmodule te verwijderen, gebruiken we de opdracht rmmod (module verwijderen). In het volgende voorbeeld wordt de module speedstep-lib.ko verwijderd of verwijderd.

rmmod /lib/modules/4.4.0-21-generic/kernel/drivers/cpufreq/speedstep-lib.ko 

Kernelmodules beheren met de modprobe-opdracht

modprobe is een intelligent commando voor het weergeven, invoegen en verwijderen van modules uit de kernel. Het zoekt in de moduledirectory /lib/modules/$ (uname -r) naar alle modules en gerelateerde bestanden, maar sluit alternatieve configuratiebestanden uit in /etc/modprobe.d map.

Hier heb je niet het absolute pad van een module nodig; dit is het voordeel van het gebruik van modprobe ten opzichte van de voorgaande commando's.

Om een module in te voegen, geeft u eenvoudigweg de naam ervan als volgt op.

modprobe speedstep-lib

Om een module te verwijderen, gebruikt u de vlag -r op deze manier.

modprobe -r speedstep-lib

Opmerking: onder modprobe wordt automatische conversie van onderstrepingstekens uitgevoerd, dus er is geen verschil tussen _ en terwijl modulenamen invoeren.

Voor meer gebruiksinformatie en opties, lees de modprobe manpagina.

man modprobe

Vergeet niet uit te checken:

  1. Hoe u Kernel Runtime-parameters op een persistente en niet-persistente manier kunt wijzigen
  2. Hoe te installeren of upgraden naar de nieuwste kernelversie in CentOS 7
  3. Hoe Kernel te upgraden naar de nieuwste versie in Ubuntu

Dat is het voor nu! Heeft u nuttige ideeën die u aan deze handleiding wilt toevoegen of heeft u vragen, gebruik dan het onderstaande feedbackformulier om ze naar ons te sturen.