Linuxové jadro

Správa modulov jadra systému Linux

Správa modulov jadra systému Linux

Pochopenie jadra systému Linux

Linuxové jadro je jadrom operačného systému Linux. Obsahuje hlavné komponenty určené na hardvér a umožňuje komunikáciu aj interakciu medzi používateľom a hardvérom. Linuxové jadro nie je monolitický systém, ale je dosť flexibilné a jadro je rozšírené o takzvané moduly jadra.

Čo je to modul jadra?

Všeobecne platí, že modul jadra je „časť kódu, ktorú je možné na požiadanie načítať a vyložiť do jadra. Rozširujú funkčnosť jadra bez nutnosti reštartovania systému “[1]. To vedie k veľmi veľkej flexibilite počas prevádzky.

Ďalej „modul jadra môže byť nakonfigurovaný ako zabudovaný alebo načítateľný. Ak chcete modul dynamicky načítať alebo odstrániť, musí byť nakonfigurovaný ako načítateľný modul v konfigurácii jadra “[1]. To sa deje v zdrojovom súbore jadra / usr / src / linux /.konfigurácia [2]. Vstavané moduly sú označené „y“ a načítateľné moduly „m“. Ako príklad to ukazuje zoznam 1 pre modul SCSI:

Výpis 1: Vyhlásenie o použití modulu SCSI

CONFIG_SCSI = y # vstavaný modul
CONFIG_SCSI = m # načítateľný modul
Premenná # CONFIG_SCSI # nie je nastavená

Neodporúčame upravovať konfiguračný súbor priamo, ale na definíciu použitia príslušného modulu v jadre Linuxu použite príkaz „make config“, „make menuconfig“ alebo „make xconfig“.

Príkazy modulu

Systém Linux je dodávaný s množstvom rôznych príkazov na prácu s modulmi jadra. Zahŕňa to zoznam modulov aktuálne načítaných do jadra systému Linux, zobrazovanie informácií o moduloch a tiež načítanie a vykladanie modulov jadra. Ďalej tieto príkazy vysvetlíme podrobnejšie.

Pre súčasné jadrá Linuxu poskytuje balík kmod nasledujúce príkazy [3]. Všetky príkazy sú symbolickými odkazmi na kmod.

Zoznam aktuálne načítaných modulov s lsmod

Začíname príkazom lsmod. lsmod skracuje „zoznam modulov“ a zobrazuje všetky moduly práve načítané do jadra Linuxu pekným formátovaním obsahu súboru / proc / modules. Výpis 2 zobrazuje jeho výstup, ktorý sa skladá z troch stĺpcov: názov modulu, veľkosť použitá v pamäti a ďalšie moduly jadra, ktoré používajú tento konkrétny.

Výpis 2: Používanie lsmod

$ lsmod
Veľkosť modulu používa
ctr 12927 2
ccm 17534 2
snd_hrtimer 12604 1
snd_seq 57112 1
snd_seq_device 13132 1 snd_seq

$

Nájdite dostupné moduly pre vaše súčasné jadro

Môžu byť k dispozícii moduly jadra, o ktorých ešte neviete. Sú uložené v adresári / lib / modules. Pomocou nástroja find v kombinácii s príkazom uname môžete vytlačiť zoznam týchto modulov. “Uname -r” iba vypíše verziu aktuálne bežiaceho jadra Linuxu. Zoznam 3 to dokazuje pre staršiu verziu 3.16.0-7 Linux
jadra a zobrazuje moduly pre IPv6 a IRDA.

Výpis 3: Zobrazenie dostupných modulov (výber)

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

$

Zobraziť informácie o module pomocou modinfo

Príkaz modinfo vám povie viac o požadovanom module jadra („informácie o module“). Ako parameter vyžaduje modinfo buď úplnú cestu k modulu, alebo iba názov modulu. Výpis 4 to demonštruje pre jadrový modul IrDA, ktorý pracuje so zásobníkom protokolu Infrared Direct Access.

Výpis 4: Zobrazenie informácií o module

$ / sbin / modinfo irda
názov súboru: / lib / modules / 3.16.0-7-amd64 / kernel / net / irda / irda.ko
alias: net-pf-23
licencia: GPL
description: The Linux IrDA Protocol Stack
autor: Dag Brattli & Jean Tourrilhes
záleží: crc-ccitt
vermagic: 3.16.Modifikácie 0-7-amd64 SMP mod_unload
$

Výstup obsahuje rôzne informačné polia, ako je úplná cesta k modulu jadra, jeho alias, softvérová licencia, popis modulu, autori a interné prvky jadra. Pole „závisí“ zobrazuje, na ktorých ďalších moduloch jadra závisí.

Informačné polia sa líšia modul od modulu. Aby sa výstup obmedzil na konkrétne informačné pole, modinfo akceptuje parameter „-F“ (skratka pre „-field“), za ktorým nasleduje názov poľa. V zozname 5 je výstup obmedzený na licenčné informácie sprístupnené pomocou poľa licencie.

Výpis 5: Zobraziť iba konkrétne pole.

$ / sbin / modinfo -F licencia irda
GPL
$

V novších jadrách Linuxu je k dispozícii užitočná bezpečnostná funkcia. Toto sa týka kryptograficky podpísaných modulov jadra. Ako je vysvetlené na webovej stránke projektu Linux kernel [4], „toto umožňuje zvýšenú bezpečnosť jadra tým, že zakazuje načítanie nepodpísaných modulov alebo modulov
podpísané neplatným kľúčom. Podpisovanie modulov zvyšuje bezpečnosť tým, že sťažuje načítanie škodlivého modulu do jadra. Kontrolu podpisu modulu vykonáva jadro, takže nie je potrebné mať „dôveryhodné bity užívateľského priestoru.”Obrázok dole ukazuje toto pre
modul parport_pc.

Zobraziť konfiguráciu modulu pomocou modprobe

Každý modul jadra má konkrétnu konfiguráciu. Príkaz modprobe nasledovaný voľbou „-c“ (skratka pre „-showconfig“) vypíše konfiguráciu modulu. V kombinácii s grep je tento výstup obmedzený na konkrétny symbol. Zoznam 6 to demonštruje pre možnosti protokolu IPv6.

Výpis 6: Zobraziť konfiguráciu modulu

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

Zobraziť závislosti modulu

Jadro Linuxu je navrhnuté modulárne a funkcionalita je distribuovaná do niekoľkých modulov. To vedie k niekoľkým závislostiam modulov, ktoré je možné znova zobraziť pomocou modprobe. Zoznam 7 používa možnosť „-show-depends“, aby vypísal zoznam závislostí pre modul i915.

Výpis 7: Zobraziť závislosti modulov

$ / sbin / modprobe --show-závisí na 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 / tlačidlo.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / i915 / i915.ko
$

Ak chcete zobraziť závislosti ako strom podobný príkazu „strom“ alebo „lsblk“, môže vám pomôcť projekt modtree [5] (strom modulov i915 nájdete na obrázku nižšie). Aj keď je voľne dostupný na GitHub, vyžaduje určité úpravy, aby vyhovoval pravidlám slobodného softvéru a stal sa súčasťou distribúcie Linuxu ako balík.

Načítavajú sa moduly

Načítanie modulu do bežiaceho jadra je možné vykonať pomocou dvoch príkazov - insmod („vložiť modul“) a modprobe. Uvedomte si, že medzi týmito dvoma je malý, ale dôležitý rozdiel: insmod nerieši závislosti modulu, ale modprobe je šikovnejší a robí to.

Výpis 8 ukazuje, ako vložiť modul jadra IrDA. Upozorňujeme, že insmode pracuje s úplnou cestou k modulu, zatiaľ čo modprobe je s menom modulu spokojný a vyhľadá ho v strome modulov aktuálneho jadra systému Linux.

Výpis 8: Vloženie modulu jadra

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

# modprobe irda

Vykladanie modulov

Posledný krok sa týka vyloženia modulov z bežiaceho jadra. Pre túto úlohu sú opäť k dispozícii dva príkazy - modprobe a rmmod („odstrániť modul“). Oba príkazy očakávajú názov modulu ako parameter. Výpis 9 to ukazuje na odstránenie modulu IrDA z bežiaceho jadra Linuxu.

Výpis 9: Odstránenie modulu jadra

# rmmod irda

# modprobe -r irda

Záver

Zaobchádzať s modulmi jadra Linuxu nie je veľké kúzlo. Stačí sa naučiť niekoľko príkazov a ste pánom kuchyne.

Ďakujem

Autor by chcel poďakovať Axelovi Beckertovi (ETH Zürich) a Saif du Plessis (Hothead Studio Cape Town) za pomoc pri príprave článku.

Odkazy a referencie

  • [1] Modul jadra, Arch Linux wiki, https: // wiki.archlinux.org / index.php / Kernel_module
  • [2] Konfigurácia jadra, https: // tldp.org / AKO / SCSI-2.4-AKO / kconfig.html
  • [3] kmod, https: // git.jadro.org / pub / scm / utils / kernel / kmod / kmod.git
  • [4] Podpisovacie zariadenie modulu jadra, https: // www.jadro.org / doc / html / v4.15 / príručka správcu / podpisovanie modulov.html
  • [5] modtree, https: // github.com / falconindy / modtree
Hry Ako zobraziť počítadlo FPS v hrách Linux
Ako zobraziť počítadlo FPS v hrách Linux
Hranie na systéme Linux získalo veľký tlak, keď spoločnosť Valve v roku 2012 oznámila podporu systému Linux pre klienta Steam a ich hry. Od tej doby s...
Hry Ako sťahovať a prehrávať Sid Meier's Civilization VI v systéme Linux
Ako sťahovať a prehrávať Sid Meier's Civilization VI v systéme Linux
Úvod do hry Civilization 6 predstavuje moderné poňatie klasického konceptu predstaveného v sérii hier Age of Empires. Myšlienka bola dosť jednoduchá; ...
Hry Ako inštalovať a hrať Doom na Linuxe
Ako inštalovať a hrať Doom na Linuxe
Úvod do Doom Séria Doom vznikla v 90. rokoch po vydaní pôvodného Doomu. Bol to okamžitý hit a od tej doby herná séria získala množstvo ocenení a origi...