Jedro Linuxa

Upravljanje modulov jedra Linuxa

Upravljanje modulov jedra Linuxa

Razumevanje jedra Linuxa

Jedro Linuxa je jedro operacijskega sistema Linux. Vsebuje glavne komponente za naslavljanje strojne opreme in omogoča tako komunikacijo kot interakcijo med uporabnikom in strojno opremo. Jedro Linuxa ni monoliten sistem, ampak precej prilagodljiv, jedro pa je razširjeno s tako imenovanimi moduli jedra.

Kaj je modul jedra?

Na splošno je modul jedra "del kode, ki ga je mogoče naložiti in razložiti v jedro na zahtevo. Razširijo funkcionalnost jedra brez ponovnega zagona sistema. "[1]. To vodi do zelo velike prilagodljivosti med delovanjem.

Poleg tega je „modul jedra mogoče konfigurirati kot vgrajen ali naložljiv. Če želite dinamično naložiti ali odstraniti modul, ga je treba konfigurirati kot naložljiv modul v konfiguraciji jedra «[1]. To se naredi v izvorni datoteki jedra / usr / src / linux /.konfiguracija [2]. Vgrajeni moduli so označeni z "y", naložljivi moduli pa z "m". Kot primer navedba 1 to dokazuje za modul SCSI:

Seznam 1: Izjava o uporabi modula SCSI

CONFIG_SCSI = y # vgrajeni modul
CONFIG_SCSI = m # naložljiv modul
Spremenljivka # CONFIG_SCSI # ni nastavljena

Ne priporočamo urejanja konfiguracijske datoteke neposredno, ampak za uporabo ustreznega modula v jedru Linuxa uporabite ukaz “make config”, “make menuconfig” ali “make xconfig”.

Ukazi modula

Sistem Linux ima številne različne ukaze za obdelavo jedrnih modulov. To vključuje seznam modulov, ki so trenutno naloženi v jedro Linuxa, prikaz informacij o modulih ter nalaganje in razkladanje modulov jedra. Spodaj bomo podrobneje razložili te ukaze.

Za trenutna jedra Linuxa so v paketu kmod na voljo naslednji ukazi [3]. Vsi ukazi so simbolne povezave do kmod.

Seznam trenutno naloženih modulov z lsmod

Začnemo z ukazom lsmod. lsmod okrajša "seznam modulov" in prikaže vse module, ki so trenutno naloženi v jedro Linuxa, tako da lepo oblikuje vsebino datoteke / proc / module. Seznam 2 prikazuje rezultate, ki jih sestavljajo trije stolpci: ime modula, velikost, ki se uporablja v pomnilniku, in drugi moduli jedra, ki uporabljajo tega specifičnega.

Seznam 2: Uporaba lsmod

$ lsmod
Velikost modula, ki ga uporablja
ctr 12927 2
ccm 17534 2
snd_hrtimer 12604 1
snd_seq 57112 1
snd_seq_device 13132 1 snd_seq
..
$

Poiščite razpoložljive module za vaše trenutno jedro

Na voljo so morda jedrni moduli, ki jih še ne poznate. Shranjeni so v imenik / lib / module. S pomočjo funkcije find v kombinaciji z ukazom uname lahko natisnete seznam teh modulov. “Uname -r” samo natisne različico trenutno delujočega jedra Linuxa. Seznam 3 to dokazuje za starejše 3.16.0-7 Linux
jedro in prikazuje module za IPv6 in IRDA.

Seznam 3: Prikaz razpoložljivih modulov (izbor)

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

Prikažite informacije o modulu z uporabo modinfo

Ukaz modinfo vam pove več o zahtevanem modulu jedra (»informacije o modulu«). Kot parameter modinfo zahteva bodisi celotno pot modula bodisi preprosto ime modula. Seznam 4 to dokazuje za modul jedra IrDA, ki se ukvarja s paketom protokolov infrardečega neposrednega dostopa.

Seznam 4: Prikaz informacij o modulu

$ / sbin / modinfo irda
ime datoteke: / lib / modules / 3.16.0-7-amd64 / kernel / net / irda / irda.ko
vzdevek: net-pf-23
licenca: GPL
opis: Linux IrDA Protocol Stack
avtor: Dag Brattli & Jean Tourrilhes
odvisno: crc-ccitt
vermagic: 3.16.0-7-amd64 SMP mod_unload modversions
$

Izhod vsebuje različna informacijska polja, kot so celotna pot modula jedra, njegovo vzdevek, licenca programske opreme, opis modula, avtorji in notranji deli jedra. Polje "odvisno" prikazuje, od katerih drugih modulov jedra je odvisno.

Informacijska polja se od modula do modula razlikujejo. Da bi omejil izhod na določeno informacijsko polje, modinfo sprejme parameter "-F" (okrajšava za "-field"), ki mu sledi ime polja. Na seznamu 5 so rezultati omejeni na informacije o licenci, ki so na voljo z uporabo polja za licenco.

Seznam 5: Prikažite samo določeno polje.

$ / sbin / modinfo -F licenca irda
GPL
$

V novejših jedrih Linuxa je na voljo koristna varnostna funkcija. To zajema kriptografsko podpisane module jedra. Kot je razloženo na spletnem mestu projekta jedra Linuxa [4], "to omogoča večjo varnost jedra z onemogočanjem nalaganja nepodpisanih modulov ali modulov
podpisan z neveljavnim ključem. Podpisovanje modulov poveča varnost, saj otežuje nalaganje zlonamernega modula v jedro. Preverjanje podpisa modula opravi jedro, tako da ni treba imeti "zaupnih bitov uporabniškega prostora."Spodnja slika prikazuje to za
modul parport_pc.

Prikažite konfiguracijo modula s pomočjo modprobe

Vsak modul jedra ima določeno konfiguracijo. Ukaz modprobe, ki mu sledi možnost “-c” (okrajšava za “-showconfig”), navaja konfiguracijo modula. V kombinaciji z grep je ta izhod omejen na določen simbol. Seznam 6 to dokazuje za možnosti IPv6.

Seznam 6: Prikaži konfiguracijo modula

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

Pokaži odvisnosti modula

Jedro Linuxa je zasnovano tako, da je modularno, funkcionalnost pa je razdeljena na številne module. To vodi do več odvisnosti modulov, ki jih je mogoče znova prikazati s pomočjo modprobe. V seznamu 7 je za prikaz odvisnosti za modul i915 uporabljena možnost “-show-depend”.

Seznam 7: Prikaži odvisnosti modula

$ / sbin / modprobe --show-zavisi i915
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / i2c / i2c-core.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / i2c / algos / i2c-algo-bit.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / thermal / thermal_sys.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / drm.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / drm_kms_helper.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / acpi / video.ko
insmod / lib / modules / 3.16.Gumb 0-7-amd64 / kernel / drivers / acpi /.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / i915 / i915.ko
$

Za prikaz odvisnosti kot drevesa, podobnega ukazu "drevo" ali "lsblk", vam lahko pomaga projekt modtree [5] (glejte sliko spodaj za drevo modula i915). Čeprav je brezplačno dostopen na GitHub, zahteva nekaj prilagoditev, da bo v skladu s pravili za brezplačno programsko opremo in da bo del distribucije Linuxa kot paket.

Nalaganje modulov

Nalaganje modula v delujoče jedro lahko izvedete z dvema ukazoma - insmod (»vstavi modul«) in modprobe. Zavedajte se, da obstaja majhna, a pomembna razlika med tema dvema: insmod ne razrešuje odvisnosti modulov, modprobe pa je pametnejši in to počne.

Seznam 8 prikazuje, kako vstaviti modul jedra IrDA. Prosimo, upoštevajte, da insmode deluje s celotno potjo modula, medtem ko je modprobe zadovoljen z imenom modula in ga sam poišče v drevesu modula za trenutno jedro Linuxa.

Seznam 8: Vstavljanje modula jedra

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

Razkladanje modulov

Zadnji korak se nanaša na razkladanje modulov iz delujočega jedra. Za to nalogo sta na voljo dva ukaza - modprobe in rmmod ("odstrani modul"). Oba ukaza pričakujeta ime modula kot parameter. Seznam 9 to prikazuje za odstranitev modula IrDA iz delujočega jedra Linuxa.

Seznam 9: Odstranjevanje modula jedra

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

Zaključek

Ravnanje z jedrnimi moduli Linuxa ni velika čarovnija. Le nekaj ukazov za učenje in vi ste mojster kuhinje.

Hvala vam

Avtor se zahvaljuje Axelu Beckertu (ETH Zürich) in Saifu du Plessisu (Hothead Studio Cape Town) za pomoč pri pripravi članka.

Povezave in reference

  • [1] Modul jedra, wiki Arch Linux, https: // wiki.archlinux.org / kazalo.php / modul_jedra
  • [2] Konfiguracija jedra, https: // tldp.org / HOWTO / SCSI-2.4-HOWTO / kconfig.html
  • [3] kmod, https: // git.jedro.org / pub / scm / utils / kernel / kmod / kmod.git
  • [4] Objekt za podpisovanje modula jedra, https: // www.jedro.org / doc / html / v4.15 / admin-guide / modul-podpisovanje.html
  • [5] modtree, https: // github.com / falconindy / modtree
Kako prikazati števec FPS v igrah Linux
Linux gaming je dobil velik zagon, ko je Valve leta 2012 napovedal podporo Linuxu za odjemalca Steam in njihove igre. Od takrat se je veliko AAA in in...
Kako prenesti in igrati Sid Meier's Civilization VI v Linuxu
Uvod v igro Civilization 6 je sodoben pogled na klasični koncept, uveden v seriji iger Age of Empires. Ideja je bila dokaj preprosta; začeli bi v zelo...
Kako namestiti in igrati Doom v Linuxu
Uvod v Doom Serija Doom je nastala v devetdesetih letih po izidu prvotnega Dooma. Bil je takojšen hit in od takrat naprej je serija iger prejela števi...