Linux-ydin

Linux-ytimen moduulien hallinta

Linux-ytimen moduulien hallinta

Ymmärtäminen Linux-ytimestä

Linux-ydin on Linux-käyttöjärjestelmän ydin. Se sisältää laitteiston pääkomponentit ja mahdollistaa sekä viestinnän että vuorovaikutuksen käyttäjän ja laitteiston välillä. Linux-ydin ei ole monoliittinen järjestelmä, mutta melko joustava, ja ydintä laajennetaan ns. Ytimen moduuleilla.

Mikä on ytimen moduuli?

Yleensä ytimen moduuli on “koodikappale, joka voidaan ladata ja purkaa ytimeen tarvittaessa. Ne laajentavat ytimen toiminnallisuutta tarvitsematta käynnistää järjestelmää uudelleen ”[1]. Tämä johtaa erittäin joustavuuteen käytön aikana.

Lisäksi "ytimen moduuli voidaan määrittää sisäänrakennetuksi tai ladattavaksi. Moduulin lataamiseksi tai poistamiseksi dynaamisesti se on määritettävä ladattavaksi moduuliksi ytimen kokoonpanossa ”[1]. Tämä tehdään ytimen lähdetiedostossa / usr / src / linux /.konfiguraatio [2]. Sisäänrakennetut moduulit on merkitty "y" ja ladattavat moduulit "m". Esimerkiksi luettelo 1 osoittaa tämän SCSI-moduulille:

Luettelo 1: SCSI-moduulin käyttöilmoitus

CONFIG_SCSI = y # sisäänrakennettu moduuli
CONFIG_SCSI = m # ladattava moduuli
Muuttujaa # CONFIG_SCSI # ei ole määritetty

Emme suosittele määritystiedoston muokkaamista suoraan, mutta vastaavan moduulin käytön määrittelemiseen Linux-ytimessä käytetään joko komentoa make make, make menuconfig tai make xconfig.

Moduulikomennot

Linux-järjestelmässä on useita erilaisia ​​komentoja ytimen moduulien käsittelemiseksi. Tähän sisältyy Linux-ytimeen tällä hetkellä ladattujen moduulien luettelointi, moduulien tietojen näyttäminen sekä ytimen moduulien lataaminen ja purkaminen. Seuraavassa selitämme nämä komennot tarkemmin.

Nykyisille Linux-ytimille seuraavat komennot tarjoaa kmod-paketti [3]. Kaikki komennot ovat symbolisia linkkejä kmodiin.

Luettelo tällä hetkellä ladatuista moduuleista, joissa on lsmod

Aloitamme komennolla lsmod. lsmod lyhentää "luettelomoduuleja" ja näyttää kaikki moduulit, jotka on tällä hetkellä ladattu Linux-ytimeen muotoilemalla hienosti tiedoston / proc / modules sisältö. Listaus 2 näyttää sen tuotoksen, joka koostuu kolmesta sarakkeesta: moduulin nimi, muistissa käytetty koko ja muut tätä erityistä käyttävät ytimoduulit.

Listaus 2: Käyttämällä lsmodia

$ lsmod
Moduulin koko, jota käyttää
ctr 12927 2
ccm 17534 2
snd_hrtimer 12604 1
snd_seq 57112 1
snd_seq_device 13132 1 snd_seq

$

Löydä käytettävissä olevat moduulit nykyiselle ytimellesi

Saattaa olla käytettävissä ytimen moduuleja, joista et ole vielä tietoinen. Ne tallennetaan hakemistoon / lib / modules. Löydät yhdessä uname-komennon avulla voit tulostaa luettelon näistä moduuleista. “Uname -r” vain tulostaa version käynnissä olevasta Linux-ytimestä. Listaus 3 osoittaa tämän vanhemmille 3.16.0-7 Linux
ydin ja näyttää moduulit IPv6: lle ja IRDA: lle.

Listaus 3: Saatavilla olevien moduulien näyttäminen (valinta)

$ find / lib / modules / $ (uname -r) -name '*.ko '
/ lib / modules / 3.16.0-7-amd64 / kernel / 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 / kernel / net / irda / irlan / irlan.ko
/ lib / modules / 3.16.0-7-amd64 / kernel / net / irda / irda.ko
/ lib / modules / 3.16.0-7-amd64 / kernel / net / irda / ircomm / ircomm.ko
/ lib / modules / 3.16.0-7-amd64 / kernel / net / irda / ircomm / ircomm-tty.ko

$

Näytä moduulin tiedot modinfolla

Komento modinfo kertoo lisätietoja pyydetystä ytimen moduulista ("moduulin tiedot"). Parametrina modinfo vaatii joko koko moduulin polun tai yksinkertaisesti moduulin nimen. Listaus 4 osoittaa tämän IrDA-ytimoduulille, joka käsittelee infrapuna-suorapääsyprotokollapinoa.

Listaus 4: Näytä moduulin tiedot

$ / sbin / modinfo irda
tiedostonimi: / lib / modules / 3.16.0-7-amd64 / kernel / net / irda / irda.ko
alias: net-pf-23
lisenssi: GPL
kuvaus: Linux IrDA Protocol Stack
kirjailija: Dag Brattli & Jean Tourrilhes
riippuu: crc-ccitt
vermaginen: 3.16.0-7-amd64 SMP mod_unload modversions
$

Lähtö sisältää erilaisia ​​tietokenttiä, kuten ytimen moduulin koko polun, sen aliaksen nimen, ohjelmistolisenssin, moduulin kuvauksen, kirjoittajat sekä ytimen sisäiset kentät. Kenttä “riippuu” osoittaa, mistä muista ytimen moduuleista se riippuu.

Tietokentät eroavat moduuleista toiseen. Rajoittaakseen lähdön tietylle tietokentälle modinfo hyväksyy parametrin ”-F” (lyhenne sanoista “-field”), jota seuraa kentän nimi. Luettelossa 5 lähtö on rajoitettu lisenssitietoihin, jotka on asetettu saataville lisenssikentän avulla.

Listaus 5: Näytä vain tietty kenttä.

$ / sbin / modinfo -F -lisenssi irda
GPL
$

Uudemmissa Linux-ytimissä on käytettävissä hyödyllinen suojausominaisuus. Tämä kattaa kryptografisesti allekirjoitetut ytimoduulit. Kuten Linux-ytimiprojektisivustolla [4] on selitetty, "tämä lisää ytimen turvallisuutta kieltämällä allekirjoittamattomien moduulien tai moduulien lataamisen
allekirjoitettu virheellisellä avaimella. Moduulien allekirjoittaminen lisää tietoturvaa vaikeuttamalla haitallisen moduulin lataamista ytimeen. Ydin suorittaa moduulin allekirjoituksen tarkistuksen, jotta ei tarvitse olla luotettavia käyttäjätilabittejä."Seuraava kuva osoittaa tämän
parport_pc-moduuli.

Näytä moduulin kokoonpano modprobe-sovelluksella

Jokaisella ytimen moduulilla on erityinen kokoonpano. Komento modprobe ja sen jälkeen vaihtoehto "-c" (lyhenne sanoista "-showconfig") listaa moduulin kokoonpanon. Yhdessä grepin kanssa tämä lähtö on rajoitettu tiettyyn symboliin. Listaus 6 osoittaa tämän IPv6-vaihtoehdoille.

Listaus 6: Näytä moduulin kokoonpano

$ / 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
aliaksen symboli: nf_defrag_ipv6_enable nf_defrag_ipv6
aliaksen symboli: nf_nat_icmpv6_reply_translation nf_nat_ipv6
aliaksen symboli: nft_af_ipv6 nf_tables_ipv6
aliaksen symboli: nft_reject_ipv6_eval nft_reject_ipv6
$

Näytä moduuliriippuvuudet

Linux-ydin on suunniteltu modulaariseksi, ja toiminnallisuus on jaettu useille moduuleille. Tämä johtaa useisiin moduuliriippuvuuksiin, jotka voidaan näyttää modprobe-sovelluksella uudelleen. Listaus 7 käyttää vaihtoehtoa "-show-depend" i915-moduulin riippuvuuksien luetteloimiseksi.

Listaus 7: Näytä moduuliriippuvuudet

$ / sbin / modprobe --show-riippuu i915: stä
insmod / lib / moduulit / 3.16.0-7-amd64 / kernel / drivers / i2c / i2c-core.ko
insmod / lib / moduulit / 3.16.0-7-amd64 / kernel / drivers / i2c / algos / i2c-algo-bit.ko
insmod / lib / moduulit / 3.16.0-7-amd64 / kernel / drivers / terminen / terminen_sys.ko
insmod / lib / moduulit / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / drm.ko
insmod / lib / moduulit / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / drm_kms_helper.ko
insmod / lib / moduulit / 3.16.0-7-amd64 / kernel / drivers / acpi / video.ko
insmod / lib / moduulit / 3.16.0-7-amd64 / kernel / drivers / acpi / -painike.ko
insmod / lib / moduulit / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / i915 / i915.ko
$

Jotta riippuvuudet voidaan näyttää puuna, joka on samanlainen kuin "puu" tai "lsblk" -komento, modtree-projekti [5] voi auttaa (katso i915-moduulipuun alla oleva kuva). Vaikka se on vapaasti saatavilla GitHubissa, se vaatii joitain mukautuksia vapaiden ohjelmistojen sääntöjen noudattamiseksi ja siitä, että siitä tulee osa Linux-jakelua pakettina.

Ladataan moduuleja

Moduulin lataaminen käynnissä olevaan ytimeen voidaan tehdä kahdella komennolla - insmod (“insert module”) ja modprobe. Huomaa, että näiden kahden välillä on pieni, mutta tärkeä ero: insmod ei ratkaise moduuliriippuvuuksia, mutta modprobe on fiksumpi ja tekee sen.

Listaus 8 näyttää kuinka IrDA-ytimoduuli lisätään. Huomaa, että insmode toimii koko moduulin polulla, kun taas modprobe on tyytyväinen moduulin nimeen ja etsii sen itse nykyisen Linux-ytimen moduulipuusta.

Listaus 8: Ytimen moduulin lisääminen

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

# modprobe irda

Purkaminen moduuleista

Viimeinen vaihe käsittelee moduulien purkamista käynnissä olevasta ytimestä. Tässä tehtävässä on jälleen kaksi komentoa - modprobe ja rmmod (“remove module”). Molemmat komennot odottavat moduulin nimen parametrina. Listaus 9 osoittaa tämän IrDA-moduulin poistamiseksi käynnissä olevasta Linux-ytimestä.

Listaus 9: Ytimoduulin poistaminen

# rmmod irda

# modprobe -r irda

Johtopäätös

Linux-ytimen moduulien käsittely ei ole suuri taikuutta. Vain muutama opittava komento, ja olet keittiön päällikkö.

Kiitos

Kirjoittaja haluaa kiittää Axel Beckertiä (ETH Zürich) ja Saif du Plessisiä (Hothead Studio Kapkaupunki) avusta artikkelin valmistelussa.

Linkit ja viitteet

  • [1] Ytimoduuli, Arch Linux -wiki, https: // wiki.archlinux.org / index.php / Kernel_module
  • [2] Ytimen määritykset, https: // tldp.org / HOWTO / SCSI-2.4-HOWTO / kconfig.html
  • [3] kmod, https: // git.ydin.org / pub / scm / utils / kernel / kmod / kmod.git
  • [4] Ytimen moduulien allekirjoituspalvelu, https: // www.ydin.org / doc / html / v4.15 / admin-opas / moduulin allekirjoittaminen.html
  • [5] modpuu, https: // github.com / falconindy / modtree
Vulkan for Linux Users
With each new generation of graphics cards, we see game developers push the limits of graphical fidelity and come one step closer to photorealism. But...
OpenTTD vs Simutrans
Creating your own transport simulation can be fun, relaxing and extremely enticing. That's why you need to make sure that you try out as many games as...
OpenTTD Tutorial
OpenTTD is one of the most popular business simulation games out there. In this game, you need to create a wonderful transportation business. However,...