Linux-kerne

Administration af Linux-kernemoduler

Administration af Linux-kernemoduler

Forståelse af Linux-kernen

Linux-kernen er kernen i Linux-operativsystemet. Den indeholder hovedkomponenterne til adressering af hardware og tillader både kommunikation og interaktion mellem brugeren og hardware. Linux-kernen er ikke et monolitisk system, men ret fleksibel, og kernen udvides med såkaldte kernemoduler.

Hvad er et kernemodul?

Generelt er et kernemodul et ”stykke kode, der kan indlæses og aflæsses i kernen efter behov. De udvider kernens funktionalitet uden behov for at genstarte systemet ”[1]. Dette fører til meget stor fleksibilitet under drift.

Desuden “kan et kernemodul konfigureres som indbygget eller kan indlæses. For dynamisk at indlæse eller fjerne et modul, skal det konfigureres som et modul, der kan indlæses i kernekonfigurationen ”[1]. Dette gøres i kernekildefilen / usr / src / linux /.config [2]. Indbyggede moduler er markeret med “y” og moduler, der kan indlæses, med “m”. Som et eksempel viser liste 1 dette for SCSI-modulet:

Liste 1: SCSI-modulbrugserklæring

CONFIG_SCSI = y # indbygget modul
CONFIG_SCSI = m # modul, der kan indlæses
# CONFIG_SCSI # variabel er ikke indstillet

Vi anbefaler ikke at redigere konfigurationsfilen direkte, men at bruge enten kommandoen "make config", "make menuconfig" eller "make xconfig" til at definere brugen af ​​det tilsvarende modul i Linux-kernen.

Modulkommandoer

Linux-systemet leveres med en række forskellige kommandoer til håndtering af kernemoduler. Dette inkluderer en liste over de moduler, der aktuelt er indlæst i Linux-kernen, visning af moduloplysninger samt indlæsning og aflæsning af kernemoduler. Nedenfor forklarer vi disse kommandoer mere detaljeret.

For de aktuelle Linux-kerner leveres følgende kommandoer af kmod-pakken [3]. Alle kommandoer er symbolske links til kmod.

Listen er i øjeblikket indlæst moduler med lsmod

Vi starter med kommandoen lsmod. lsmod forkorter "listemoduler" og viser alle moduler, der aktuelt er indlæst i Linux-kernen ved pænt at formatere indholdet af filen / proc / modulerne. Liste 2 viser dens output, der består af tre kolonner: modulnavn, den størrelse, der bruges i hukommelsen, og andre kernemoduler, der bruger denne specifikke.

Liste 2: Brug af lsmod

$ lsmod
Modulstørrelse brugt af
ctr 12927 2
ccm 17534 2
snd_hrtimer 12604 1
snd_seq 57112 1
snd_seq_device 13132 1 snd_seq
..
$

Find tilgængelige moduler til din nuværende kerne

Der kan være kernemoduler tilgængelige, som du endnu ikke er opmærksom på. De gemmes i biblioteket / lib / modulerne. Ved hjælp af find kombineret med kommandoen uname kan du udskrive en liste over disse moduler. “Uname -r” udskriver bare versionen af ​​den aktuelt kørende Linux-kerne. Liste 3 viser dette for en ældre 3.16.0-7 Linux
kerne og viser moduler til IPv6 og IRDA.

Liste 3: Visning af tilgængelige moduler (valg)

$ find / lib / modules / $ (uname -r) -name '*.ko '
/ lib / modules / 3.16.0-7-amd64 / kerne / net / ipv6 / ip6_vti.ko
/ lib / modules / 3.16.0-7-amd64 / kernel / net / ipv6 / xfrm6_tunnel.ko
/ lib / modules / 3.16.0-7-amd64 / kernel / net / ipv6 / ip6_tunnel.ko
/ lib / modules / 3.16.0-7-amd64 / kernel / net / ipv6 / ip6_gre.ko
/ lib / modules / 3.16.0-7-amd64 / kernel / net / irda / irnet / irnet.ko
/ lib / modules / 3.16.0-7-amd64 / kerne / net / irda / irlan / irlan.ko
/ lib / modules / 3.16.0-7-amd64 / kerne / net / irda / irda.ko
/ lib / modules / 3.16.0-7-amd64 / kerne / net / irda / ircomm / ircomm.ko
/ lib / modules / 3.16.0-7-amd64 / kerne / net / irda / ircomm / ircomm-tty.ko
..
$

Vis moduloplysninger ved hjælp af modinfo

Kommandoen modinfo fortæller dig mere om det anmodede kernemodul (“modulinformation”). Som parameter kræver modinfo enten hele modulstien eller blot modulnavnet. Liste 4 viser dette for IrDA-kernemodulet, der beskæftiger sig med Infrared Direct Access-protokolstakken.

Liste 4: Vis moduloplysninger

$ / sbin / modinfo irda
filnavn: / lib / modules / 3.16.0-7-amd64 / kerne / net / irda / irda.ko
alias: net-pf-23
licens: GPL
beskrivelse: Linux IrDA Protocol Stack
forfatter: Dag Brattli & Jean Tourrilhes
afhænger af: crc-ccitt
vermagisk: 3.16.0-7-amd64 SMP mod_unload-ændringer
$

Outputtet indeholder forskellige informationsfelter, såsom den fulde sti til kernemodulet, dets aliasnavn, softwarelicens, modulbeskrivelse, forfattere såvel som kernemoduler. Feltet "afhænger" viser hvilke andre kernemoduler det afhænger af.

Informationsfelterne adskiller sig fra modul til modul. For at begrænse output til et specifikt informationsfelt accepterer modinfo parameteren “-F” (forkortelse for “-felt”) efterfulgt af feltnavnet. I lister 5 er output begrænset til de licensoplysninger, der gøres tilgængelige ved hjælp af licensfeltet.

Liste 5: Vis kun et bestemt felt.

$ / sbin / modinfo -F licens irda
GPL
$

I nyere Linux-kerner er en nyttig sikkerhedsfunktion tilgængelig. Dette dækker kryptografisk signerede kernemoduler. Som forklaret på Linux-kerneprojektwebstedet [4] “tillader dette øget kernesikkerhed ved at afvise indlæsning af usignerede moduler eller moduler
underskrevet med en ugyldig nøgle. Modulsignering øger sikkerheden ved at gøre det sværere at indlæse et ondsindet modul i kernen. Modulets signaturkontrol udføres af kernen, så det ikke er nødvendigt at have “betroede brugerrumsbits.”Figuren nedenfor viser dette for
parport_pc-modul.

Vis modulkonfiguration ved hjælp af modprobe

Hvert kernemodul leveres med en bestemt konfiguration. Kommandomodproben efterfulgt af indstillingen “-c” (forkortelse for “-showconfig”) viser modulkonfigurationen. I kombination med grep er denne output begrænset til et specifikt symbol. Liste 6 viser dette for IPv6-indstillinger.

Liste 6: Vis modulkonfiguration

$ / sbin / modprobe -c | grep ipv6
alias net_pf_10_proto_0_type_6 dccp_ipv6
alias net_pf_10_proto_33_type_6 dccp_ipv6
alias nf_conntrack_10 nf_conntrack_ipv6
alias nf_nat_10 nf_nat_ipv6
alias nft_afinfo_10 nf_tables_ipv6
alias nft_chain_10_nat nft_chain_nat_ipv6
alias nft_chain_10_route nft_chain_route_ipv6
alias nft_expr_10_reject nft_reject_ipv6
alias-symbol: nf_defrag_ipv6_enable nf_defrag_ipv6
alias-symbol: nf_nat_icmpv6_reply_translation nf_nat_ipv6
alias-symbol: nft_af_ipv6 nf_tables_ipv6
alias-symbol: nft_reject_ipv6_eval nft_reject_ipv6
$

Vis modulafhængigheder

Linux-kernen er designet til at være modulær, og funktionalitet fordeles over et antal moduler. Dette fører til flere modulafhængigheder, der kan vises ved hjælp af modprobe igen. Listing 7 bruger indstillingen "-show-depends" for at liste afhængighederne for i915-modulet.

Liste 7: Vis modulafhængigheder

$ / sbin / modprobe --show-depends i915
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / i2c / i2c-core.ko
insmod / lib / modules / 3.16.0-7-amd64 / kerne / drivere / i2c / algos / i2c-algo-bit.ko
insmod / lib / modules / 3.16.0-7-amd64 / kerne / drivere / termisk / termisk_sys.ko
insmod / lib / modules / 3.16.0-7-amd64 / kerne / drivere / gpu / drm / drm.ko
insmod / lib / modules / 3.16.0-7-amd64 / kerne / drivere / gpu / drm / drm_kms_helper.ko
insmod / lib / modules / 3.16.0-7-amd64 / kerne / drivere / acpi / video.ko
insmod / lib / modules / 3.16.0-7-amd64 / kerne / drivere / acpi / knap.ko
insmod / lib / modules / 3.16.0-7-amd64 / kerne / drivere / gpu / drm / i915 / i915.ko
$

For at vise afhængighederne som et træ, der ligner kommandoen “træ” eller “lsblk”, kan modtree-projektet [5] hjælpe (se figuren nedenfor for i915-modultræet). Selvom det er frit tilgængeligt på GitHub, kræver det nogle tilpasninger for at overholde reglerne for gratis software og for at blive en del af en Linux-distribution som en pakke.

Indlæser moduler

Indlæsning af et modul til en kørende kerne kan udføres med to kommandoer - insmod (“insert module”) og modprobe. Vær opmærksom på, at der er en lille, men vigtig forskel mellem disse to: insmod løser ikke modulafhængigheder, men modprobe er klogere og gør det.

Liste 8 viser, hvordan du indsætter IrDA-kernemodulet. Bemærk, at insmode fungerer med den fulde modulsti, mens modprobe er tilfreds med modulets navn og ser det selv op i modultræet for den aktuelle Linux-kerne.

Liste 8: Indsættelse af et kernemodul

# insmod / lib / modules / 3.16.0-7-amd64 / kerne / net / irda / irda.ko
..
# modprobe irda

Aflæsning af moduler

Det sidste trin omhandler aflæsning af moduler fra en kørende kerne. Igen er der to kommandoer til rådighed for denne opgave - modprobe og rmmod ("fjern modul"). Begge kommandoer forventer modulnavnet som en parameter. Liste 9 viser dette til fjernelse af IrDA-modulet fra den kørende Linux-kerne.

Liste 9: Fjernelse af et kernemodul

# rmmod irda
..
# modprobe -r irda
..

Konklusion

Håndtering af Linux-kernemoduler er ikke stor magi. Bare et par kommandoer at lære, og du er køkkenherren.

tak skal du have

Forfatteren vil gerne takke Axel Beckert (ETH Zürich) og Saif du Plessis (Hothead Studio Cape Town) for deres hjælp under forberedelsen af ​​artiklen.

Links og referencer

  • [1] Kernemodul, Arch Linux wiki, https: // wiki.archlinux.org / indeks.php / Kernel_module
  • [2] Kernekonfiguration, https: // tldp.org / HOWTO / SCSI-2.4-HOWTO / kconfig.html
  • [3] kmod, https: // git.kerne.org / pub / scm / utils / kernel / kmod / kmod.git
  • [4] Kernel modul signeringsfacilitet, https: // www.kerne.org / doc / html / v4.15 / admin-guide / modul-signering.html
  • [5] modtree, https: // github.com / falconindy / modtree
Bedste apps til Gamepad Mapping til Linux
Hvis du kan lide at spille spil på Linux med en gamepad i stedet for et typisk tastatur- og musesystem, er der nogle nyttige apps til dig. Mange pc-sp...
Nyttige værktøjer til Linux-spillere
Hvis du kan lide at spille spil på Linux, er chancerne for, at du måske har brugt apps og hjælpeprogrammer som Wine, Lutris og OBS Studio for at forbe...
HD Remastered-spil til Linux, der aldrig tidligere havde haft en Linux-udgivelse
Mange spiludviklere og udgivere kommer med HD-remaster af gamle spil for at forlænge franchisens levetid. Venligst fans, der anmoder om kompatibilitet...