Linuxové jádro

Správa modulů jádra Linuxu

Správa modulů jádra Linuxu

Porozumění jádru Linuxu

Linuxové jádro je jádrem operačního systému Linux. Obsahuje hlavní komponenty pro řešení hardwaru a umožňuje komunikaci i interakci mezi uživatelem a hardwarem. Linuxové jádro není monolitický systém, ale je docela flexibilní a jádro je rozšířeno o takzvané moduly jádra.

Co je to modul jádra?

Obecně je modul jádra „kus kódu, který lze na vyžádání načíst a načíst do jádra. Rozšiřují funkčnost jádra bez nutnosti restartu systému “[1]. To vede k velmi velké flexibilitě během provozu.

Dále „modul jádra lze konfigurovat jako vestavěný nebo načtitelný. Aby bylo možné modul dynamicky načíst nebo odebrat, musí být nakonfigurován jako načtitelný modul v konfiguraci jádra “[1]. To se děje ve zdrojovém souboru jádra / usr / src / linux /.konfigurace [2]. Vestavěné moduly jsou označeny „y“ a zatížitelné moduly „m“. Jako příklad to ukazuje seznam 1 pro modul SCSI:

Výpis 1: Prohlášení o použití modulu SCSI

CONFIG_SCSI = y # vestavěný modul
CONFIG_SCSI = m # načtitelný modul
Proměnná # CONFIG_SCSI # není nastavena

Nedoporučujeme upravovat konfigurační soubor přímo, ale použít příkaz „make config“, „make menuconfig“ nebo „make xconfig“ k definování použití příslušného modulu v linuxovém jádře.

Příkazy modulu

Systém Linux je dodáván s řadou různých příkazů pro zpracování modulů jádra. To zahrnuje výpis modulů aktuálně načtených do jádra Linuxu, zobrazení informací o modulech a také načítání a vykládání modulů jádra. Níže vysvětlíme tyto příkazy podrobněji.

Pro aktuální jádra Linuxu poskytuje balíček příkazů kmod následující příkazy [3]. Všechny příkazy jsou symbolickými odkazy na kmod.

Seznam aktuálně načtených modulů s lsmod

Začneme příkazem lsmod. lsmod zkracuje „seznam modulů“ a zobrazuje všechny moduly aktuálně načtené do linuxového jádra pěkným formátováním obsahu souboru / proc / modules. Výpis 2 zobrazuje jeho výstup, který se skládá ze tří sloupců: název modulu, velikost použitá v paměti a další moduly jádra, které používají tento konkrétní.

Výpis 2: Používání lsmod

$ lsmod
Velikost modulu používaná uživatelem
ctr 12927 2
ccm 17534 2
snd_hrtimer 12604 1
snd_seq 57112 1
snd_seq_device 13132 1 snd_seq

$

Najděte dostupné moduly pro vaše aktuální jádro

Mohou být k dispozici moduly jádra, o kterých ještě nevíte. Jsou uloženy v adresáři / lib / modules. Pomocí funkce find v kombinaci s příkazem uname můžete vytisknout seznam těchto modulů. “Uname -r” pouze vytiskne verzi aktuálně běžícího jádra Linuxu. Výpis 3 to ukazuje na starší 3.16.0-7 Linux
jádra a zobrazuje moduly pro IPv6 a IRDA.

Výpis 3: Zobrazení dostupných modulů (výběr)

$ 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

$

Zobrazte informace o modulu pomocí modinfo

Příkaz modinfo vám řekne více o požadovaném modulu jádra („informace o modulu“). Jako parametr vyžaduje modinfo buď úplnou cestu k modulu, nebo jednoduše název modulu. Výpis 4 to ukazuje pro modul jádra IrDA zabývající se zásobníkem protokolu Infrared Direct Access.

Výpis 4: Zobrazení informací o modulu

$ / sbin / modinfo irda
název souboru: / lib / modules / 3.16.0-7-amd64 / kernel / net / irda / irda.ko
alias: net-pf-23
licence: GPL
description: The Linux IrDA Protocol Stack
autor: Dag Brattli & Jean Tourrilhes
záleží: crc-ccitt
vermagic: 3.16.0-7-amd64 SMP mod_unload modversions
$

Výstup obsahuje různá informační pole, jako je úplná cesta k modulu jádra, jeho alias, softwarová licence, popis modulu, autoři a interní prvky jádra. Pole „záleží“ ukazuje, na kterých dalších modulech jádra záleží.

Informační pole se u jednotlivých modulů liší. Aby bylo možné omezit výstup na konkrétní informační pole, modinfo přijímá parametr „-F“ (zkratka pro „-field“) následovaný názvem pole. V seznamu 5 je výstup omezen na licenční informace zpřístupněné pomocí pole licence.

Výpis 5: Zobrazit pouze konkrétní pole.

$ / sbin / modinfo -F licence irda
GPL
$

V novějších linuxových jádrech je k dispozici užitečná funkce zabezpečení. Toto pokrývá kryptograficky podepsané moduly jádra. Jak je vysvětleno na webových stránkách projektu Linux kernel [4], „toto umožňuje zvýšené zabezpečení jádra tím, že zakáže načítání nepodepsaných modulů nebo modulů
podepsáno neplatným klíčem. Podepisování modulů zvyšuje zabezpečení tím, že ztěžuje načítání škodlivého modulu do jádra. Kontrolu podpisu modulu provádí jádro, takže není nutné mít „důvěryhodné bity uživatelského prostoru.„Obrázek níže ukazuje toto pro
modul parport_pc.

Zobrazit konfiguraci modulu pomocí modprobe

Každý modul jádra má specifickou konfiguraci. Příkaz modprobe následovaný volbou „-c“ (zkratka pro „-showconfig“) vypíše konfiguraci modulu. V kombinaci s grep je tento výstup omezen na konkrétní symbol. Výpis 6 to ukazuje pro možnosti protokolu IPv6.

Výpis 6: Zobrazit konfiguraci 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
$

Zobrazit závislosti modulů

Linuxové jádro je navrženo tak, aby bylo modulární a funkčnost je distribuována do několika modulů. To vede k několika závislostem modulů, které lze znovu zobrazit pomocí modprobe. Výpis 7 používá možnost „-zobrazit-závisí“, aby vypsal závislosti pro modul i915.

Výpis 7: Zobrazit závislosti modulů

$ / sbin / modprobe - show-záleží 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 / jádro / ovladače / acpi / video.ko
insmod / lib / modules / 3.16.0-7-amd64 / jádro / ovladače / acpi / tlačítko.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / i915 / i915.ko
$

Chcete-li zobrazit závislosti jako strom podobný příkazu „strom“ nebo „lsblk“, může vám pomoci projekt modtree [5] (strom modulu i915 viz obrázek níže). Ačkoli je volně dostupný na GitHubu, vyžaduje určité úpravy, aby vyhovoval pravidlům pro svobodný software a stal se součástí distribuce Linuxu jako balíček.

Načítání modulů

Načtení modulu do běžícího jádra lze provést dvěma příkazy - insmod („vložte modul“) a modprobe. Uvědomte si, že mezi těmito dvěma je malý, ale důležitý rozdíl: insmod nevyřeší závislosti modulů, ale modprobe je chytřejší a dělá to.

Výpis 8 ukazuje, jak vložit modul jádra IrDA. Vezměte prosím na vědomí, že insmode pracuje s celou cestou modulu, zatímco modprobe je spokojený s názvem modulu a vyhledá jej sám ve stromu modulu pro aktuální jádro Linuxu.

Výpis 8: Vložení modulu jádra

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

# modprobe irda

Vykládání modulů

Poslední krok se zabývá uvolněním modulů z běžícího jádra. Pro tuto úlohu jsou opět k dispozici dva příkazy - modprobe a rmmod („odebrat modul“). Oba příkazy očekávají název modulu jako parametr. Výpis 9 to ukazuje pro odebrání modulu IrDA z běžícího linuxového jádra.

Výpis 9: Odebrání modulu jádra

# rmmod irda

# modprobe -r irda

Závěr

Manipulace s linuxovými jádrovými moduly není velká magie. Stačí se naučit pár příkazů a vy jste pánem kuchyně.

Děkuju

Autor by chtěl poděkovat Axelovi Beckertovi (ETH Zürich) a Saif du Plessis (Hothead Studio Cape Town) za pomoc při přípravě článku.

Odkazy a reference

  • [1] Modul jádra, Arch Linux wiki, https: // wiki.archlinux.org / index.php / Kernel_module
  • [2] Konfigurace jádra, https: // tldp.org / HOWTO / SCSI-2.4-HOWTO / kconfig.html
  • [3] kmod, https: // git.jádro.org / pub / scm / utils / kernel / kmod / kmod.sakra
  • [4] Zařízení pro podepisování modulů jádra, https: // www.jádro.org / doc / html / v4.15 / admin-guide / module-signing.html
  • [5] modtree, https: // github.com / falconindy / modtree
Hry Jak nainstalovat a hrát Doom na Linuxu
Jak nainstalovat a hrát Doom na Linuxu
Úvod do Doom Série Doom vznikla v 90. letech po vydání původního Doomu. Byl to okamžitý hit a od té doby herní série získala řadu ocenění a původní Do...
Hry Vulkan pro uživatele Linuxu
Vulkan pro uživatele Linuxu
S každou novou generací grafických karet vidíme, že vývojáři her posouvají hranice grafické věrnosti a přibližují se k fotorealismu. Ale navzdory vešk...
Hry OpenTTD vs Simutrans
OpenTTD vs Simutrans
Vytvoření vlastní simulace dopravy může být zábavné, uvolňující a mimořádně lákavé. Proto se musíte ujistit, že vyzkoušíte co nejvíce her, abyste našl...