Linux kernel

Upravljanje modulima jezgre Linuxa

Upravljanje modulima jezgre Linuxa

Razumijevanje Linux jezgre

Jezgra Linuxa jezgra je operativnog sustava Linux. Sadrži glavne komponente za rješavanje hardvera i omogućuje komunikaciju i interakciju između korisnika i hardvera. Linux kernel nije monolitni sustav, već je prilično fleksibilan, a jezgra je proširena takozvanim kernel modulima.

Što je modul jezgre?

Općenito, modul jezgre je „dio koda koji se može učitati i istovariti u kernel na zahtjev. Proširuju funkcionalnost jezgre bez potrebe za ponovnim podizanjem sustava ”[1]. To dovodi do vrlo velike fleksibilnosti tijekom rada.

Nadalje, „modul jezgre može se konfigurirati kao ugrađeni ili za učitavanje. Da bi se dinamički učitao ili uklonio modul, on mora biti konfiguriran kao modul koji se može učitati u konfiguraciji jezgre ”[1]. To se radi u izvornoj datoteci jezgre / usr / src / linux /.konfiguracija [2]. Ugrađeni moduli označeni su s "y", a moduli za učitavanje s "m". Kao primjer, popis 1 pokazuje ovo za SCSI modul:

Popis 1: Izjava o upotrebi SCSI modula

CONFIG_SCSI = y # ugrađeni modul
CONFIG_SCSI = m # modul koji se može učitati
# CONFIG_SCSI # varijabla nije postavljena

Ne preporučujemo izravno uređivanje konfiguracijske datoteke, već da biste upotrijebili bilo naredbu "make config", "make menuconfig" ili "make xconfig" za definiranje upotrebe odgovarajućeg modula u Linux kernelu.

Naredbe modula

Linux sustav dolazi s nizom različitih naredbi za rukovanje modulima jezgre. To uključuje popis modula koji su trenutno učitani u jezgru Linuxa, prikaz podataka o modulima, kao i učitavanje i iskrcavanje modula jezgre. U nastavku ćemo detaljnije objasniti ove naredbe.

Za trenutne Linux jezgre, sljedeće naredbe pruža paket kmod [3]. Sve su naredbe simboličke poveznice s kmod.

Popis trenutno učitanih modula s lsmod

Počinjemo s naredbom lsmod. lsmod skraćuje "popis modula" i prikazuje sve module koji su trenutno učitani u Linux kernel lijepim formatiranjem sadržaja datoteke / proc / modules. Popis 2 prikazuje svoj izlaz koji se sastoji od tri stupca: naziv modula, veličina koja se koristi u memoriji i drugi moduli jezgre koji koriste ovaj specifični.

Popis 2: Korištenje lsmod

$ lsmod
Veličina modula koji koristi
ctr 12927 2
ccm 17534 2
snd_hrtimer 12604 1
snd_seq 57112 1
snd_seq_device 13132 1 snd_seq
..
$

Pronađite dostupne module za vašu trenutnu jezgru

Možda su dostupni moduli jezgre kojih još niste svjesni. Pohranjeni su u direktorij / lib / module. Uz pomoć pronalaska, u kombinaciji s naredbom uname, možete ispisati popis tih modula. “Uname -r” samo ispisuje verziju trenutno pokrenutog Linux jezgre. Popis 3 to pokazuje za starije 3.16.0-7 Linux
kernel i prikazuje module za IPv6 i IRDA.

Popis 3: Prikaz dostupnih modula (odabir)

$ 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
..
$

Prikažite informacije o modulu pomoću modinfo

Naredba modinfo govori vam više o zatraženom modulu kernela ("informacije o modulu"). Kao parametar, modinfo zahtijeva puni put modula ili jednostavno ime modula. Popis 4 pokazuje to za IrDA modul jezgre koji se bavi stekom protokola infracrvenog izravnog pristupa.

Popis 4: Prikaz podataka o modulu

$ / sbin / modinfo irda
naziv datoteke: / lib / modules / 3.16.0-7-amd64 / kernel / net / irda / irda.ko
alias: net-pf-23
licenca: GPL
opis: Linux IrDA protokolni stog
autor: Dag Brattli & Jean Tourrilhes
ovisi: crc-ccitt
vermagic: 3.16.0-7-amd64 SMP mod_unload modversions
$

Izlaz sadrži različita informacijska polja poput pune staze za modul jezgre, njegovo alias ime, softversku licencu, opis modula, autore, kao i unutarnje dijelove jezgre. Polje "ovisi" pokazuje o kojim ostalim modulima jezgre ovisi.

Informacijska polja razlikuju se od modula do modula. Da bi ograničio izlaz na određeno informacijsko polje, modinfo prihvaća parametar "-F" (kratica za "-polje") iza kojeg slijedi naziv polja. Na popisu 5, izlaz je ograničen na informacije o licenci dostupne pomoću polja licence.

Popis 5: Prikažite samo određeno polje.

$ / sbin / modinfo -F licenca irda
GPL
$

U novijim Linuxovim jezgrama dostupna je korisna sigurnosna značajka. Ovo pokriva kriptografski potpisane module jezgre. Kao što je objašnjeno na web mjestu projekta Linux kernel [4], „ovo omogućuje povećanu sigurnost kernela onemogućavanjem učitavanja nepotpisanih modula ili modula
potpisan nevažećim ključem. Potpisivanje modula povećava sigurnost otežavanjem učitavanja zlonamjernog modula u jezgru. Provjeru potpisa modula vrši kernel tako da nije potrebno imati „pouzdane bitove korisničkog prostora."Donja slika to pokazuje za
modul parport_pc.

Prikažite konfiguraciju modula pomoću modprobe

Svaki modul jezgre dolazi s određenom konfiguracijom. Naredba modprobe praćena opcijom "-c" (skraćeno od "-showconfig") navodi konfiguraciju modula. U kombinaciji s grep, ovaj je izlaz ograničen na određeni simbol. Popis 6 to pokazuje za IPv6 opcije.

Popis 6: Prikaži konfiguraciju modula

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

Prikaži ovisnosti modula

Linux kernel je dizajniran da bude modularan, a funkcionalnost je raspoređena na više modula. To dovodi do nekoliko ovisnosti modula koje se mogu ponovno prikazati pomoću modprobe. Popis 7 koristi opciju “-show-ovisi” kako bi se popisale ovisnosti za modul i915.

Popis 7: Prikaži ovisnosti modula

$ / sbin / modprobe --show-ovisi 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.0-7-amd64 / kernel / drivers / acpi / gumb.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / i915 / i915.ko
$

Kako bi se ovisnosti prikazale kao stablo slično naredbi "stablo" ili "lsblk", projekt modtree [5] može vam pomoći (pogledajte donju sliku za stablo modula i915). Iako je besplatno dostupan na GitHubu, zahtijeva neke prilagodbe kako bi se udovoljilo pravilima za besplatni softver i kako bi postao dio Linux distribucije kao paket.

Učitavanje modula

Učitavanje modula u pokrenutu jezgru može se izvršiti pomoću dvije naredbe - insmod (“insert module”) i modprobe. Imajte na umu da postoji mala, ali važna razlika između ovo dvoje: insmod ne rješava ovisnosti o modulima, ali modprobe je pametniji i to čini.

Popis 8 pokazuje kako umetnuti IrDA modul jezgre. Imajte na umu da insmode radi s punom stazom modula, dok je modprobe zadovoljan imenom modula i sam ga traži u stablu modula za trenutni Linux kernel.

Popis 8: Umetanje modula jezgre

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

Istovar modula

Posljednji se korak bavi istovarom modula iz pokrenutog jezgra. Ponovno su za ovaj zadatak dostupne dvije naredbe - modprobe i rmmod ("ukloni modul"). Obje naredbe očekuju naziv modula kao parametar. Popis 9 to pokazuje za uklanjanje IrDA modula iz pokrenutog Linux kernela.

Popis 9: Uklanjanje modula jezgre

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

Zaključak

Rukovanje Linux kernel modulima nije velika čarolija. Samo nekoliko naredbi za naučiti, a vi ste gospodar kuhinje.

Hvala vam

Autor se zahvaljuje Axelu Beckertu (ETH Zürich) i Saifu du Plessisu (Hothead Studio Cape Town) na pomoći tijekom pripreme članka.

Poveznice i reference

  • [1] Modul jezgre, wiki Arch Linux, https: // wiki.Archlinux.org / indeks.php / modul_ Kernel
  • [2] Konfiguracija jezgre, https: // tldp.org / HOWTO / SCSI-2.4-HOWTO / kconfig.html
  • [3] kmod, https: // git.zrno.org / pub / scm / utils / kernel / kmod / kmod.git
  • [4] Objekt za potpisivanje modula jezgre, https: // www.zrno.org / doc / html / v4.15 / admin-vodič / potpisivanje modula.html
  • [5] modtree, https: // github.com / falconindy / modtree
Najbolji emulatori igraće konzole za Linux
Ovaj će članak navesti popularni softver za emulaciju igraće konzole dostupan za Linux. Emulacija je sloj kompatibilnosti softvera koji oponaša hardve...
Najbolji Linux Distros za igre na sreću 2021. godine
Linux operativni sustav daleko je prevalio svoj izvorni, jednostavni izgled zasnovan na poslužitelju. Ovaj se OS posljednjih godina izuzetno poboljšao...
Kako snimiti i struji svoju igraću sesiju na Linuxu
U prošlosti se igranje igara smatralo samo hobijem, ali s vremenom je igračka industrija zabilježila ogroman rast u pogledu tehnologije i broja igrača...