Linux kernel

Linux kernelmodulok kezelése

Linux kernelmodulok kezelése

A Linux kernel megértése

A Linux kernel a Linux operációs rendszer magja. Ez tartalmazza a hardver kezelésének fő összetevőit, és lehetővé teszi mind a kommunikációt, mind az interakciót a felhasználó és a hardver között. A Linux kernel nem monolit rendszer, de meglehetősen rugalmas, és a kernt kibővítik úgynevezett kernelmodulok.

Mi az a kernelmodul?

Általában a kernelmodul egy „kóddarab, amelyet igény szerint be lehet tölteni és kirakni a kernelbe. Kiterjesztik a kernel funkcionalitását a rendszer újraindítása nélkül ”[1]. Ez nagyon nagy rugalmassághoz vezet működés közben.

Továbbá „egy kernelmodul beépítettként vagy betölthetőként konfigurálható. A modul dinamikus betöltéséhez vagy eltávolításához be kell állítani betölthető modulként a kernel konfigurációjában ”[1]. Ez a kernel forrásfájljában történik / usr / src / linux /.konfiguráció [2]. A beépített modulokat "y", a betölthető modulokat "m" jelöli. Például az 1. felsorolás bemutatja ezt az SCSI modul esetében:

1. lista: SCSI modul használati nyilatkozata

CONFIG_SCSI = y # beépített modul
CONFIG_SCSI = m # betölthető modul
A # CONFIG_SCSI # változó nincs beállítva

Nem javasoljuk a konfigurációs fájl közvetlen szerkesztését, hanem a „make config”, a „make menuconfig” vagy a „make xconfig” parancs használatával határozhatja meg a megfelelő modul használatát a Linux kernelben.

Modulparancsok

A Linux rendszer számos különféle parancsot tartalmaz a kernelmodulok kezelésére. Ez magában foglalja a jelenleg a Linux kernelbe töltött modulok felsorolását, a modul információk megjelenítését, valamint a kernel modulok be- és kirakodását. Az alábbiakban részletesebben elmagyarázzuk ezeket a parancsokat.

A jelenlegi Linux kernelek esetében a következő parancsokat a kmod csomag biztosítja [3]. Az összes parancs szimbolikus hivatkozás a kmod-ra.

Az aktuálisan betöltött modulok listája az lsmod paranccsal

Az lsmod paranccsal indulunk. Az lsmod rövidíti a „list modulokat”, és megjeleníti az összes jelenleg a Linux kernelbe töltött modult a fájl / proc / modules tartalmának szép formázásával. A 2. lista a kimenetét mutatja, amely három oszlopból áll: a modul nevéből, a memóriában használt méretből és más ezt a kernelt tartalmazó modulokból.

2. lista: Az lsmod használata

$ lsmod
A modul mérete
ctr 12927 2
ccm 17534 2
snd_hrtimer 12604 1
snd_seq 57112 1
snd_seq_device 13132 1 snd_seq

$

Keresse meg az aktuális kernel számára elérhető modulokat

Előfordulhat, hogy olyan kernelmodulok állnak rendelkezésre, amelyekről még nem tudott. A / lib / modules könyvtárban vannak tárolva. A find segítségével az uname paranccsal kombinálva kinyomtathatja ezeknek a moduloknak a listáját. Az „uname -r” csak kinyomtatja a jelenleg futó Linux kernel verzióját. A 3. felsorolás ezt bizonyítja egy idősebb 3 esetében.16.0-7 Linux
kernel, és megmutatja az IPv6 és az IRDA moduljait.

3. lista: A rendelkezésre álló modulok megjelenítése (kiválasztás)

$ 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

$

Modulinformációk megjelenítése a modinfo segítségével

A modinfo parancs többet megtud a kért kernelmodulról („modulinformációk”). Paraméterként a modinfo vagy a teljes modul elérési útját, vagy egyszerűen a modul nevét igényli. A 4. lista ezt mutatja az IrDA kernelmodul esetében, amely az infravörös közvetlen hozzáférés protokoll veremével foglalkozik.

4. lista: A modul adatainak megjelenítése

$ / sbin / modinfo irda
fájlnév: / lib / modules / 3.16.0-7-amd64 / kernel / net / irda / irda.ko
álnév: net-pf-23
licenc: GPL
leírás: A Linux IrDA protokoll verem
szerző: Dag Brattli & Jean Tourrilhes
függ: crc-ccitt
vermágikus: 3.16.0-7-amd64 SMP mod_unload modversions
$

A kimenet különböző információs mezőket tartalmaz, például a kernel modul teljes elérési útját, annak álnevét, szoftverlicencét, modulleírását, szerzőit, valamint a kernel belső részét. A „függ” mező megmutatja, hogy mely más kernelmoduloktól függ.

Az információs mezők modulonként eltérőek. Annak érdekében, hogy a kimenetet egy adott információmezőre korlátozza, a modinfo elfogadja a „-F” (rövidítve: -field) paramétert, amelyet a mező neve követ. Az 5. listában a kimenet a licencmező használatával elérhető licencinformációkra korlátozódik.

5. lista: Csak egy adott mező megjelenítése.

$ / sbin / modinfo -F licenc irda
GPL
$

Az újabb Linux kernelekben hasznos biztonsági funkció érhető el. Ez magában foglalja a kriptográfia aláírású kernelmodulokat. Amint azt a Linux kernel projekt webhelyén [4] kifejtették, „ez lehetővé teszi a kernel fokozott biztonságát azáltal, hogy tiltja az aláíratlan modulok vagy modulok betöltését
érvénytelen kulccsal írták alá. A modul aláírása növeli a biztonságot, mivel megnehezíti egy rosszindulatú modul betöltését a kernelbe. A modul aláírásának ellenőrzését a kern végzi, így nincs szükség „megbízható felhasználói tér bitekre.”Az alábbi ábra ezt mutatja a
parport_pc modul.

Modulkonfiguráció megjelenítése a modprobe segítségével

Minden kernelmodul sajátos konfigurációval rendelkezik. A modprobe parancs, majd a „-c” opció (röviden a „-showconfig”) felsorolja a modul konfigurációját. A grep-kel kombinálva ez a kimenet egy adott szimbólumra korlátozódik. A 6. lista ezt demonstrálja az IPv6 opcióknál.

6. lista: A modul konfigurációjának megjelenítése

$ / 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
álnév szimbólum: nf_defrag_ipv6_enable nf_defrag_ipv6
álnév szimbólum: nf_nat_icmpv6_reply_translation nf_nat_ipv6
álnév szimbólum: nft_af_ipv6 nf_tables_ipv6
álnév szimbólum: nft_reject_ipv6_eval nft_reject_ipv6
$

Modulfüggőségek megjelenítése

A Linux kernelt modulárisra tervezték, és a funkcionalitás számos modulra oszlik. Ez több modulfüggőséghez vezet, amelyek a modprobe használatával ismét megjeleníthetők. A 7. lista a „-show-depend” opciót használja az i915 modul függőségeinek felsorolásához.

7. lista: Modulfüggőségek megjelenítése

$ / sbin / modprobe --show-i915 függ
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 / meghajtók / termikus / termikus_sys.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / driverek / 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 / driverek / acpi / video.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / meghajtók / acpi / gomb.ko
insmod / lib / modules / 3.16.0-7-amd64 / kernel / drivers / gpu / drm / i915 / i915.ko
$

Annak érdekében, hogy a függőségeket a „tree” vagy „lsblk” parancshoz hasonló faként jelenítsük meg, a modtree projekt [5] segíthet (lásd az i915 modulfa alábbi ábráját). Annak ellenére, hogy szabadon elérhető a GitHubon, némi kiigazítást igényel, hogy megfeleljen az ingyenes szoftver szabályainak, és csomagként egy Linux disztribúció részévé váljon.

Modulok betöltése

Modul betöltése egy futó kernelbe két paranccsal történhet - insmod („insert module”) és modprobe. Ne feledje, hogy van egy kicsi, de fontos különbség e kettő között: az insmod nem oldja meg a modulfüggőségeket, de a modprobe okosabb és ezt teszi.

A 8. lista megmutatja, hogyan kell beilleszteni az IrDA kernelmodult. Felhívjuk figyelmét, hogy az insmode a teljes modul elérési útjával működik, míg a modprobe elégedett a modul nevével, és maga keresi meg a jelenlegi Linux kernel modulfájában.

8. lista: Kernelmodul beszúrása

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

# modprobe irda

Modulok kirakása

Az utolsó lépés a modulok futtatásáról szól egy futó kernelből. Ismét két parancs áll rendelkezésre ehhez a feladathoz - a modprobe és az rmmod („modul eltávolítása”). Mindkét parancs a modul nevét várja paraméterként. A 9. lista ezt mutatja az IrDA modul eltávolításához a futó Linux kernelből.

9. lista: A kernelmodul eltávolítása

# rmmod irda

# modprobe -r irda

Következtetés

A Linux kernelmodulok kezelése nem nagy varázslat. Csak néhány parancs a megtanulásra, és te vagy a konyha ura.

Köszönöm

A szerző köszönetet mond Axel Beckertnek (ETH Zürich) és Saif du Plessisnek (Hothead Studio Cape Town) a cikk elkészítése során nyújtott segítségükért.

Linkek és hivatkozások

  • [1] Kernel modul, Arch Linux wiki, https: // wiki.archlinux.org / index.php / Kernel_module
  • [2] Kernel konfigurációja, https: // tldp.org / HOGYAN / SCSI-2.4-HOGYAN / kconfig.html
  • [3] kmod, https: // git.kernel.org / pub / scm / utils / kernel / kmod / kmod.git
  • [4] Kernel modul aláírási lehetőség, https: // www.kernel.org / doc / html / v4.15 / admin-útmutató / modul-aláírás.html
  • [5] modfa, https: // github.com / falconindy / modtree
Az egér középső gombja nem működik a Windows 10 rendszerben
A középső egérgomb segít átgörgetni a hosszú weboldalakat és a sok adatot tartalmazó képernyőket. Ha ez leáll, akkor a billentyűzet segítségével görge...
Hogyan lehet megváltoztatni a bal és jobb egérgombokat a Windows 10 PC-n
Elég általános, hogy az összes számítógépes egéreszközt ergonómikusan a jobbkezes felhasználók számára tervezték. De vannak olyan egéreszközök, amelye...
Az egérkattintások emulálása az egérrel a Clickless Mouse használatával a Windows 10 rendszerben
Ha az egeret vagy a billentyűzetet nem megfelelő testtartásban, túlzott használat mellett használhatja, számos egészségügyi problémát okozhat, beleért...