Kernel (Magyar)
A Wikipédia szerint:
- A Linux kernel (nevezik még Linux rendszermagnak) egy nyílt forráskódú, monolitikus felépítésű, Unix-szerű számítógépes kernel Unix-szerű operációsrendszerek számára.
Az Arch Linux operációs rendszer a Linux kernelre épül rá. Az Arch Linux operációs rendszerhez a legfrissebb stabil kernel mellett különféle alternatív Linux kernelek is elérhetők. Ez a cikk felsorolja a szoftvercsomag-tárolókban elérhető lehetőségeket, és mindegyik lehetőségről rövid leírást ad. Továbbá, a cikk ismertetővel szolgál az operációs rendszer kernelére alkalmazható javításokról. A cikk végül áttekintést nyújt az egyedi kernelfordításról, különféle módszerekhez vezető hivatkozásokkal.
A számítógépen a kernelszoftvercsomagok a /usr/lib/modules/ útvonal alá kerülnek feltelepítésre, majd ezt követően a binárisan futtatható vmlinuz képfájl átmásolásra kerül a /boot/ könyvtárba. [1] Amikor Ön másik kernelt telepít fel a számítógépre, vagy több kernel között választ, akkor Önnek be kell állítani a boot loader programot is oly módon, hogy az tükrözze a változtatásokat. A kernel régebbi verziójára történő visszaállításával kapcsolatban tekintse meg a Downgrading packages#Kernel visszaállítása a régebbi verzióra című leírást.
Hivatalosan támogatott kernelek
A hivatalosan támogatott kernelekhez közösségi támogatás érhető el a fórumban és a hibabejelentési útmutatóban.
- Stable — Upstream (azaz a hivatalos Linux közösség által kiadott) kernel. Mondják még "vanilla" kernelnek is angolul (alapíz mint a vanília) az ízek közül. Tehát ez az alapkernel, amely mindenféle gyártói vagy disztribúció-specifikus módosítás nélkül létezik. Továbbá, kernelmodulokat tartalmaz, amelyek néhány javításotokkal vannak ellátva.
- Hardened — Egy olyan Linux kernel amely a maximális biztonságot helyezi az abszolút középpontba. Nagyon sok, a biztonságot megerősítő (hardening) szoftveres javítást alkalmaz a kernelexploitok (kernelsebezhetőségek kihasználásának) és a felhasználói térben lévő exploitok (user space sebezhetőségek kihasználásának) mérséklése érdekében. Emellett, a linux szoftvercsomagtól több upstream kernelmegerősítési funkciót is engedélyez.
- Longterm — Hosszútávúan támogatott (Long-term support, LTS) Linux kernel és kernelmodulok. Ez a szoftvercsomag hasznos amikor Ön olyan külső kernelmodulokat használ, amelyek időben nem frissülnek olyan verziókra, amelyek kompatibilisek lennének a legújabb stabil kernellel.
- Realtime kernel — Ezt a kernelt egy kicsi kernelfejlesztői csoport tartja karban Molnár Ingo vezetésével. Ez a patch lehetővé teszi, hogy szinte az egész kernel előre megszakítható legyen, kivéve néhány nagyon kicsi kódrészletet („raw_spinlock kritikus régiók”). Ez úgy valósul meg, hogy a legtöbb kernelspinlockot olyan mutexekkel helyettesítik, amelyek támogatják a prioritásöröklést, valamint az összes megszakítást és szoftveres megszakítást kernelszálakba helyezik át.
- Megjegyzés A valósidejű kerneltámogatás bekerült a Linux 6.12 verzióba.
- Zen Kernel — A kernelhackerek közös munkájának eredménye, amelynek célja a lehető legjobb Linux kernel biztosítása a mindennapi rendszerek számára. További részletekért tekintse meg a GYIK és a Részletes funkciólista oldalakat.
Kernel forráskódjának lefordítása binárisan futtatható kódra
Ön a következő módszereket tudja használni annak érdekében, hogy Önmagának saját kernelt állítson össze:
- /Arch Build System
- Ez a módszer kihasználja a már meglévő linux szoftvercsomag PKGBUILD magas minőségét és kihasználja a szoftvercsomag-kezelés előnyeit.
- /Traditional compilation
- Ez a módszer magába foglalja egy forráskódot tartalmazó tarball fájl (tehát egy forráskódot tartalmazó archívumfájl) manuális úton történő letöltését. Továbbá, magába foglalja a letöltött forráskód lefordítását normál felhasználóként az Ön saját könyvtárában.
- Egyedi kernelek használata mindenféle stabilitási és megbízhatósági problémát okozhat, beleértve az adatvesztést is. Erősen ajánlott a biztonsági mentések elkészítése, és értelemszerűen azok megléte.
- Az Arch Linux hivatalosan egyedül a #Hivatalosan támogatott kerneleket támogatja. Másik kernel használata esetén kérjük Önt, hogy a használt kernelt említse meg a támogatási kérelmeknél.
- A rendszer sebességének megnövelésére az a legjobb mód, hogy Ön először az architektúrához és a processzortípushoz igazítja hozzá a kernel beállítását.
- Ön csökkentheti a kernel méretét (és egyben csökkentheti a kódfordítási időt is) azáltal, hogy a kernelbe Ön nem helyez bele olyan dolgok támogatását, amely dogokkal Ön nem is rendelkezik vagy egyáltalán nem is szokott használni. Például az Ön esetében lehet, hogy olyan dolgokhoz, mint például a Bluetooth, video4linux, 1000Mbit Ethernet stb, felesleges lehet a támogatás kernelbe történő bevétele.
Az Arch kernelszoftvercsomagok config fájljai az Arch szoftvercsomag forrásfájljaiban találhatók (például [2], amely a linux szoftvercsomagból van belinkelve). Az éppen futó kernel config fájlja szintén elérhető lehet a fájlrendszerben a /proc/config.gz elérési útvonalon, amennyiben a CONFIG_IKCONFIG_PROC kernelopció engedélyezve van.
Néhány felsorolt szoftvercsomag binárisan futtatható kódot tartalmazó szoftvercsomag formájában is elérhető lehet a Nem hivatalos felhasználói szoftvercsomag-tárolókon keresztül.
kernel.org kernelek
- Git — Linux kernel és kernelmodulok, amelyek Linus Torvalds Git szoftverkódtárolójában megtalálható forráskódjaiból készültek el.
- Mainline — Olyan kernelek, amelyekben minden új funkció bevezetésre kerül. Kb. 2–3 havonta van kiadva.
- Next — Legújabb (úgymond "Bleeding edge") kernelek, amelyek olyan funkciókat tartalmaznak, amely funkciók a következő fő kernelkiadásba történő beolvasztásra várakoznak.
- DRM — Linux kernel, a legújabb (úgymond "Bleeding edge") GPU illesztőprogramokkal.
- Longterm — Hosszútávú támogatással (Long Term Support, LTS) rendelkező Linux kernel és kernelmodulok.
- https://www.kernel.org/ || linux-lts612AUR, linux-lts66AUR, linux-lts61AUR, linux-lts515AUR, linux-lts510AUR
Nem hivatalos kernelek
- linux-cachyos — A Linux SCHED-EXT + BORE + "Cachy sauce" kernel, további kernel és kernelmodul javításokkal és fejlesztésekkel.
- Libre — Olyan kernel amely szándékosan nem tartalmazza a szabadalom alatt álló illesztőprogramokat. Nem tartalmazza az olyan illesztőprogramokat sem amelyek forráskódjai szándékosan zavarosak, hogy azokat ne tudják emberek könnyen elolvasni, tanulmányozni és értelmezni. Értsd: Ebbe a kernelbe a nyugati, végtelenül haszonelvű, álszent/jóemberkedő, de valójában kapitalista disznók kódjai egyáltalán nem kerülnek bele.
- Liquorix — Debianra megcélzott beállítással és a Zen kernel forrásaival felépített kernelcsere. Asztali, multimédiás és játékterhelésekhez készült, gyakran használják Debian Linux teljesítményfókuszú helyettesítőkernelként. Damentz, a Liquorix patchkészlet karbantartója, aki a Zen patch-készlet fejlesztője is egyben.
- pf-kernel — Néhány nagyszerű funkciót biztosít, amelyek nem kerültek be a Linux kernelfejlesztésének főágába. Egy kernelmérnök tartja karban. Ha az új kernelekhez tartozó patch hivatalosan nem került kiadásra, akkor a patchkészlet biztosítja és támogatja a patch portokat az új kernelekhez. A linux-pf jelenlegi legjelentősebb patchjei az UKSM, DDCCI, v4l2loopback és BBRv3.
-
https://pfkernel.natalenko.name || Szoftvercsomagok:
- Szoftvercsomag-tároló, linux-pfAUR szoftvercsomag a post-factum felhasználónevet viselő pf-kernelfejlesztő által.
- Project C — Kernel Alfred Chen Project C patchkészlettel (BMQ és PDS ütemezők).
- Nitrous — Módosított Linux kernel, Skylake és újabb processzorokra optimalizálva.
- Tachyon — Patchek az Intel Clear Linux projektből, amelyet egy új projektbe vittek át, mivel a Clear Linux projekt fejlesztése abbamaradt. Teljesítmény- és biztonsági optimalizálásokat biztosít.
- tkg — Nagyon testre szabható kernel build rendszer, amely patchek és finomhangolások válogatását kínálja a jobb asztali és játékteljesítmény érdekében. Etienne Juvigny tartja karban. Többek között különféle CPU ütemezőket kínál: CFS, Project C PDS, Project C BMQ, MuQSS és CacULE.
- https://github.com/Frogging-Family/linux-tkg || Elérhető a chaotic-aur nem hivatalos szoftvercsomag tárolóban.
- VFIO — Linux kernel és néhány patch, amelyet Alex Williamson írt (acs override és i915), hogy lehetővé tegye a PCI Passthrough használatát KVM-mel bizonyos gépeken.
- XanMod — Olyan Linux kernel, amelyet kifejezetten nagy teljesítményű munkaállomások, játékra szánt asztali gépek, médiaközpontok és más rendszerek teljes kihasználására terveztek. Célja, hogy stabilabb, reszponzívabb és gördülékenyebb asztali élményt nyújtson. Ez a kernel a BFQ I/O ütemezőt, a TCP BBRv3 torlódásvezérlést, fejlett x86_64 utasításkészlet-támogatást, részleges Clear Linux patchkészletet és más alapértelmezett módosításokat használ.
- https://xanmod.org/ || linux-xanmodAUR, linux-xanmod-ltsAUR, linux-xanmod-rtAUR, linux-xanmod-boreAUR
Sok ilyen nem hivatalos kernel olyan funkciókat tartalmaz, amelyeket manuális úton, kézzel kell engedélyezni. Érdemes átnézni a patchek dokumentációját magában a kernelforráskódban (sok már tartalmaz változtatásokat a Documentation/ könyvtárban). Illetve, érdemes rákeresni a patchkészlet nevére az interneten. Így található meg az, hogy pontosan miként kell bekapcsolni és használni az adott funkciókat, illetve megtalálható az, hogy milyen beállítási lépések szükségesek a teljesítmény vagy kompatibilitás elérése érdekében.
Hibaelhárítás
Kernelpánik
A kernelpánik akkor következik be, amikor a Linux kernel olyan hibás állapotba kerül bele amely helyrehozhatatlan. Ez az állapot jellemzően hibás hardverillesztőprogramokból ered, amelyek miatt a számítógép holtpontra kerül, nem reagál, és számítógépújraindításra van szükség. Közvetlenül a holtpont előtt diagnosztikai üzenet keletkezik, amely a következőket tartalmazza: Számítógép állapota a hiba bekövetkezésekor, a függvényhívási nyomvonal, amely a hibát felismerő kernelfüggvényhez vezet, valamint a jelenleg a memóriába betöltött kernelmodulok listája. Szerencsére nem fordul elő gyakran a kernelpánik a mainline kernelverziók használata során (például azoknál a kerneleknél, amelyeket a hivatalos szoftvercsomag-tárolókban vannak benne), de amikor mégis megtörténik a kernelpánik, akkor Önnek tudnia kell azt, hogy miként kezelje.
oops=panic kernelparamétert, vagy írja be az 1 értéket a /proc/sys/kernel/panic_on_oops fájlba annak érdekében, hogy egy helyrehozható oops helyett pánikot váltson ki. Ez ajánlott, amikor Ön aggódik amiatt a kis esély miatt, hogy az oops helyreállítás rendszerinstabilitást okozhat, amely megnehezítheti a jövőbeni hibák diagnosztizálását.Pániküzenet megvizsgálása
Ha a bootolási folyamat során a kernelpánik nagyon korán következik be, akkor a parancssorban megjelenhet egy üzenet, amely a következőt tartalmazza: Kernel panic - not syncing:, de amint a systemd fut, a kernelüzenetek általában rögzítésre kerülnek és a rendszer naplófájljába beleíródnak. Amikor azonban a kernelpánik bekövetkezik, a kernel által kiadott diagnosztikai üzenet szinte soha nem kerül bele az adathordozóra kiírt naplófájlba, mert a számítógép holtpontba kerül, mielőtt a system-journald lehetőséget kapna a kiírási munka elvégzésére.
Kék képernyőn megjelenő QR-kód
A 6.10 verziótól kezdve a linux szoftvercsomagban található linux kernel alapértelmezés szerint (a drm_panic esetén) egy kék képernyőn QR-kód formájában jeleníti meg a kernelpánikot. A stack trace a QR-kód által megadott URL címen látható. Arch Linux esetén ez a https://panic.archlinux.org/panic_report hivatkozásra mutat. Az URL különféle információkat és a gzip segítségével tömörített, majd a URL fragment formában kódolt stack trace szöveganyagot tartalmazza, amely nem kerül továbbításra a szerver felé (a kliensoldalon kerül feldolgozásra).
Egy például szolgáló kernelpánik, linkeléssel és képernyőképpel megtekinthető ebben a fórumbejegyzésben.
Az előző viselkedésmódhoz való visszatérés érekében Ön adja át a panic_screen=kmsg paramétert a drm kernelmodulnak (vagy drm.panic_screen=kmsg kernel paraméter formájában) annak érdekében, hogy a stack trace a parancssorban jelenjen meg.
Parancssoros mód
Továbbra is elérhető a "régi" stílusú módja annak, hogy Ön a parancssorban közvetlenül lássa a hibát, amikor a hiba bekövetkezik (anélkül, hogy be kellene állítani a kdump crashkernel-t). Indítsa el az operációs rendszert a következő kernelparaméterekkel, majd próbálja meg reprodukálni a kernelpánikot a tty1 parancssorban:
systemd.journald.forward_to_console=1 console=tty1
pause_on_oops=másodperc kernelparamétert.Például szolgáló forgatókönyv: Rossz kernelmodulfájl
Lehetséges a diagnosztikai üzenetben található információk alapján megbecsülni, hogy melyik alrendszer vagy kernelmodul okozza a kernelpánikot. Ebben az esetben egy képzeletbeli számítógépen a bootolás során következett be a kernelpánik. Figyeljen azokra a sorokra amelyek félkövér betűkkel vannak kiemelve:
kernel: BUG: unable to handle kernel NULL pointer dereference at (null) 1 kernel: IP: fw_core_init+0x18/0x1000 [firewire_core] 2 kernel: PGD 718d00067 kernel: P4D 718d00067 kernel: PUD 7b3611067 kernel: PMD 0 kernel: kernel: Oops: 0002 [#1] PREEMPT SMP kernel: Modules linked in: firewire_core(+) crc_itu_t cfg80211 rfkill ipt_REJECT nf_reject_ipv4 nf_log_ipv4 nf_log_common xt_LOG nf_conntrack_ipv4 ... 3 kernel: CPU: 6 PID: 1438 Comm: modprobe Tainted: P O 4.13.3-1-ARCH #1 kernel: Hardware name: Gigabyte Technology Co., Ltd. H97-D3H/H97-D3H-CF, BIOS F5 06/26/2014 kernel: task: ffff9c667abd9e00 task.stack: ffffb53b8db34000 kernel: RIP: 0010:fw_core_init+0x18/0x1000 [firewire_core] kernel: RSP: 0018:ffffb53b8db37c68 EFLAGS: 00010246 kernel: RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000 kernel: RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffffffffc16d3af4 kernel: RBP: ffffb53b8db37c70 R08: 0000000000000000 R09: ffffffffae113e95 kernel: R10: ffffe93edfdb9680 R11: 0000000000000000 R12: ffffffffc16d9000 kernel: R13: ffff9c6729bf8f60 R14: ffffffffc16d5710 R15: ffff9c6736e55840 kernel: FS: 00007f301fc80b80(0000) GS:ffff9c675dd80000(0000) knlGS:0000000000000000 kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 kernel: CR2: 0000000000000000 CR3: 00000007c6456000 CR4: 00000000001406e0 kernel: Call Trace: kernel: do_one_initcall+0x50/0x190 4 kernel: ? do_init_module+0x27/0x1f2 kernel: do_init_module+0x5f/0x1f2 kernel: load_module+0x23f3/0x2be0 kernel: SYSC_init_module+0x16b/0x1a0 kernel: ? SYSC_init_module+0x16b/0x1a0 kernel: SyS_init_module+0xe/0x10 kernel: entry_SYSCALL_64_fastpath+0x1a/0xa5 kernel: RIP: 0033:0x7f301f3a2a0a kernel: RSP: 002b:00007ffcabbd1998 EFLAGS: 00000246 ORIG_RAX: 00000000000000af kernel: RAX: ffffffffffffffda RBX: 0000000000c85a48 RCX: 00007f301f3a2a0a kernel: RDX: 000000000041aada RSI: 000000000001a738 RDI: 00007f301e7eb010 kernel: RBP: 0000000000c8a520 R08: 0000000000000001 R09: 0000000000000085 kernel: R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000c79208 kernel: R13: 0000000000c8b4d8 R14: 00007f301e7fffff R15: 0000000000000030 kernel: Code: <c7> 04 25 00 00 00 00 01 00 00 00 bb f4 ff ff ff e8 73 43 9c ec 48 kernel: RIP: fw_core_init+0x18/0x1000 [firewire_core] RSP: ffffb53b8db37c68 kernel: CR2: 0000000000000000 kernel: ---[ end trace 71f4306ea1238f17 ]--- kernel: Kernel panic - not syncing: Fatal exception 5 kernel: Kernel Offset: 0x80000000 from 0xffffffff810000000 (relocation range: 0xffffffff800000000-0xfffffffffbffffffff kernel: ---[ end Kernel panic - not syncing: Fatal exception
- Jelzi, hogy milyen típusú hiba okozta a kernelpánikot. Ebben az esetben programozói hiba volt.
- Jelzi, hogy a kernelpánik a fw_core_init nevű függvényben történt, a firewire_core kernelmodulban.
- Jelzi, hogy a firewire_core volt a legutóbb a számítógép memóriájába betöltött kernelmodul.
- Jelzi, hogy a fw_core_init függvényt a do_one_initcall függvény hívta meg.
- Jelzi, hogy ez az oops üzenet valójában kernelpánik, és az operációs rendszer most holtpontba került.
Mi tehát arra következtethetünk, hogy a kernelpánik a firewire_core kernelmodul inicializálási rutinja során következett be, amikor az betöltődött a számítógép memóriájába. (Feltételezhetjük tehát azt, hogy a számítógép firewire hardvere nem kompatibilis a firewire illesztőprogramot tartalmazó kernelmodul ezen verziójával egy programozói hiba miatt, és új kiadásra kell várni). Addig is a legegyszerűbb módja annak, hogy a számítógép ismét működjön, az, ha megakadályozzuk a kernelmodul betöltését a számítógép memóriájába. Ezt kettőféleképpen tehetjük meg:
- Ha a kernelmodul az initramfs végrehajtása közben töltődik be a számítógép memóriájába, akkor indítsa újra a rendszert a következő kernelparaméterrel:
rd.blacklist=firewire_core. - Egyébként indítsa újra a rendszert a következő kernelparaméterrel:
module_blacklist=firewire_core.
Számítógép újraindítása bele a root shell -be, és ott a probléma kijavítása
A rendszer módosítása érdekében Önnek root shell-re lesz szüksége azért, hogy a kernelpánik többé ne forduljon elő. Ha a kernelpánik a bootolás során jelentkezik, akkor többféle módszer létezik a root shell elérésére, mielőtt a számítógép teljesen lefagyna:
- Indítsa újra a számítógépet az
emergency,rd.emergencyvagy-bkernelparaméterrel annak érekében, hogy Ön közvetlenül a root fájlrendszer felcsatolása és asystemdelindítása után megkapja a bejelentkezési promptot.
- Megjegyzés Ennél a pontnál a root fájlrendszer csak olvasható módban lesz felcsatolva. Ön root felhasználóként hajtsa végre a
mount -o remount,rw /parancsot a módosítások elvégzése érdekében.
- Indítsa újra a számítógépet a
rescue,rd.rescue,single,s,Svagy1kernelparaméterrel annak érdekében, hogy Ön közvetlenül a helyi fájlrendszerek felcsatolása után bejelentkezési promptot kaphasson. - Indítsa újra a számítógépet a
systemd.debug_shellkernelparaméterrel annak érdekében, hogy Ön nagyon korai root shell-t kapjon a tty9 parancssorban. Váltson át rá aCtrl+Alt+F9billentyűkombinációval. - Kísérletezzen különböző kernelparaméterekkel történő újraindítással annak érdekében, hogy esetleg letiltsa azt a kernelfunkciót, amely a kernelpánikot okozza. Próbálja ki a "régi bevált"
acpi=offésnolapicparamétereket.
- Tipp Tekintse meg a kernel-parameters.html weboldalt az összes kernelparaméter tanulmányozása érdekében.
- Végső megoldás gyanánt indítsa el a számítógépet egy Arch Linux telepítő adathordozóval, majd csatolja fel a root fájlrendszert a
/mntkönyvtárba, és root felhasználóként hajtsa végre aarch-chroot /mntparancsot. - Tiltsa le azt a szolgáltatást vagy programot, amely a kernelpánikot okozza, állítsa vissza a hibás szoftvercsomag-frissítést, vagy javítsa ki a beállításproblémát.
Hibakeresés regressziók esetén
Tekintse meg a General troubleshooting#Regressziók hibakeresése című leírást.
Próbálja ki a linux-mainlineAUR szoftvercsomagot annak érdekében, hogy Ön ellenőrizze, vajon a probléma már javítva van-e az upstreamben. A rögzített megjegyzés említ egy szoftvercsomag-tárolót is, amely már forráskódból előre lefordított kerneleket tartalmaz, így lehet, hogy nem szükséges manuálisan lefordítani, ami egyébként időigényes folyamat lehet.
Érdemes lehet megfontolni az LTS kernel (linux-lts szoftvercsomag) kipróbálását is azoknak a problémáknak a hibakeresésére, amelyek nem jelentek meg mostanában. Az LTS kernel régebbi verziói megtalálhatók az Arch Linux Archívumban.
Ha a probléma továbbra is fennáll, akkor Ön a bisect módszerrel vizsgálja meg a linux-gitAUR szoftvercsomagban megtalálható kernelt, és jelentse a hibát a kernelfolyamatnak megfelelően a regressziók jelentésére vonatkozó útmutató szerint. A MAINTAINERS fájlban található Bugtracker (B:) bejegyzéstől függően ez magában foglalhatja hibajelentés megnyitását az alrendszerek levelezőlistáin, a Kernel Bugzilla rendszerében, vagy más hibakövető rendszerekben, például a DRM Gitlab weboldalon. Fontos, hogy Ön az alapverziót (a "vanilla" verziót) próbálja ki minden patch nélkül annak érdekében, hogy megbizonyosodjon arról, hogy nem azok okozzák a problémát. Ha egy patch okozza a hibát, akkor jelentse azt a patch szerzőjének.
Kisebb kernel létrehozása
A kernel forráskódból történő lefordításának az ideje lerövidíthető azáltal, hogy Ön csak a helyi rendszer által igényelt kernelmodulokat hozza létre forráskódból a modprobed-db használatával, vagy a make localmodconfig parancs segítségével. Amennyiben Ön például egy hálózati problémát szeretne hibakeresni, akkor természetesen teljes mértékben kihagyhatja a nem releváns illesztőprogramokat, például a hangért felelős illesztőprogramokat a lefordítási folyamatból.
További olvasnivaló a témában
- O'Reilly - Linux Kernel in a Nutshell (free ebook)
- What stable kernel should I use? by Greg Kroah-Hartman
- Linux kernel documentation