EFI stub/hu

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page EFI stub and the translation is 100% complete.
Other languages:
Resources
This article has some todo items:
  • CONFIG_PM_STD_PARTITION for hibernation

Ez a cikk az EFI stub kerneleket írja le, vagyis azokat a kerneleket, amelyek közvetlenül végrehajthatóak az UEFI-ből.

Egy EFI stub (más néven EFI boot stub)[1] olyan kernel, amely EFI végrehajtható állomány, vagyis közvetlenül indítható az UEFI firmware-ből. Ez azt jelenti, hogy nincs szükség bootloaderre az indításukhoz. (De bootloader használata is lehetséges).

Kernel beállítása

EFI stub támogatás

Engedélyezni kell a következő kernel beállítási opciókat:

KERNEL EFI stub támogatás engedélyezése a 6.1 és újabb kernelek esetében
Processor type and features  --->
    [*] EFI runtime service support Search for <code>CONFIG_EFI</code> to find this item.
    [*]     EFI stub support Search for <code>CONFIG_EFI_STUB</code> to find this item.
    [ ]     EFI mixed-mode support (OPTIONAL) Search for <code>CONFIG_EFI_MIXED</code> to find this item.
Note
Az EFI vegyes üzemmód támogatása csak akkor szükséges egy 64 bites kernel indításához 32 bites firmware-ből, ha a CPU támogatja a 64 bites módot, és az EFI handover engedélyezve van.

Telepítés

Tip
Ha nem létezik EFI System Partition (ESP), akkor kérjük, hogy kövesse a lépéseket a létrehozásához először.

Automatizált

Warning
Az UEFI-megvalósítások gyártónként eltérőek, ezért az EFI Stub indítás nem működik garantáltan minden UEFI rendszer esetében. Győződjön meg róla, hogy van egy tartalék bootolási módszer, mielőtt megpróbálja az (automatizált) EFI Stub indítást.

Az automatizált EFI stub indítást a sys-kernel/installkernel-38 és az annál újabb verziók biztosítják, amikor az efistub USE jelölőzászló engedélyezve van. Ez áthelyezi a szokásos indítási elrendezést a /boot könyvtárból az EFI System Partition EFI/Gentoo könyvtárába.

Systemd kernel-install

Amikor a efistub és a systemd USE jelölőzászlók engedélyezve vannak a sys-kernel/installkernel szoftvercsomagon, a kernel-install hívja a kernel-bootcfg parancsot a app-emulation/virt-firmware szoftvercsomagból, hogy hozzáadjon vagy eltávolítson egy boot bejegyzést a telepített vagy eltávolított kernelhez. A Installkernel automatikusan elindul a kernel make install parancsának futtatásakor vagy a Distribution Kernels' utótelepítési fázisában. Ezért a kernel új telepítésekor nincs szükség különleges lépésre, bár érdemes engedélyezni az app-emulation/virt-firmware szoftvercsomagból a kernel-bootcfg-boot-successful init szolgáltatást, hogy automatikusan állandósítsa az új kernel bejegyzését, ha annak indítása sikeres volt.

A systemd init rendszerrel működő operációs rendszerek számára:

root #systemctl enable --now kernel-bootcfg-boot-successful.service

Az OpenRC init rendszerrel működő operációs rendszerek számára:

root #rc-update add kernel-bootcfg-boot-successful default

Amikor a regisztrálandó kernelképfájl nem egy Unified Kernel Image, az új bejegyzéshez tartozó kernel parancssort az alábbi helyekről olvassa be:

  • /etc/kernel/cmdline, vagy
  • /usr/lib/kernel/cmdline, vagy
  • /proc/cmdline

Ebben a sorrendben. Továbbá, az initrd= kernel parancssori argumentum automatikusan hozzáadásra kerül, ha a kernel telepítése közben initramfs képfájl lett generálva. Másfelől, ha a regisztrálandó kernel egy Unified Kernel Image, akkor az új bejegyzéshez nem kerül hozzáadásra parancssor. Ehelyett a Unified Kernel Image-be beépített parancssor használatos, amelynek tartalmát általában ugyanezen fájlokból olvassák ki, amikor a UKI generálódik.

Template:Tipp

Tradicionális installkernel

Amikor az efistub USE kapcsoló engedélyezve van a sys-kernel/installkernel szoftvercsomagon, de a systemd USE jelölőzászló le van tiltva, a Installkernel a uefi-mkconfig parancsot hívja meg a sys-boot/uefi-mkconfig szoftvercsomagból, hogy dinamikusan frissítse az UEFI beállítást. Ha a shim EFI végrehajtható állomány ugyanabban a könyvtárban található, mint a kernelkép, a kernelek Shim-en keresztül lesznek láncindítva.

Manuális

Javasolt egy külön könyvtár létrehozása a /efi/EFI alatt, feltételezve, hogy az ESP a /efi útvonalhoz van csatolva. Az EFI Stub támogatással beállított kernel esetében hozzon létre egy külön könyvtárat a /efi/EFI alatt:

root #mkdir -p /efi/EFI/example
Note
Egyes rendszereken előfordulhat, hogy /efi/EFI vagy /efi/efi (kisbetűvel) már létezik (feltételezve, hogy az ESP a /efi útvonalhoz van csatolva). Az EFI System Partition (ESP) FAT fájlrendszere nem kis- és nagybetű érzékeny, de kis- és nagybetűt megőrző (VFAT). Az alapértelmezett VFAT csatolási opciók mellett a fenti parancs mindkét esetben működni fog. További részletekért tekintse meg a kis- és nagybetű érzékenység szakaszát a FAT cikkben.

A kernel a jelenlegi kernelkönyvtárból kerül létrehozásra, majd az új könyvtárba másolódik. Ez telepíti a kernelt a következő helyre: /efi/EFI/example/bzImage.efi.

/usr/src/linux #make && make modules_install && cp arch/x86/boot/bzImage /efi/EFI/example/bzImage.efi
Tip
Ajánlott a kernel frissítésekor egy korábban jól működő verziót megtartani:
user $tree -L 3 /efi
 /efi
 └── EFI
     └── example
         ├── bzImage-6.1.67.efi
         └── bzImage-6.1.70.efi

A root partíció beállítása

Ahhoz, hogy közvetlenül az UEFI-ből lehessen bootolni a számítógépet, a kernelnek vagy az initramfs fájlnak tudnia kell, hogy hol található az bootolandó operációs rendszer gyökérpartíciója. Ha grub típusú bootkezelőt használunk, akkor a kernel a bootkezelőből kapja meg a gyökérpartíció helyére vonatkozó információt parancssori paraméterként. Stub kernel használatakor két lehetőség áll rendelkezésre a kernel számára, hogy megkapja ezt az információt – válasszon ezek közül az opciók közül:

1. lehetőség: Beállítása a kernelben
KERNEL A root partícióinformáció a 6.1 és újabb kernelek esetében
Processor type and features  --->
    [*] Built-in kernel command line
    (root=PARTUUID=adf55784-15d9-4ca3-bb3f-56de0b35d88d ro)
Important
Az adf55784-15d9-4ca3-bb3f-56de0b35d88d érték példaként szolgál, és a valós gyökérpartíció értékére kell lecserélni. Ez a blkid parancs használatával szerezhető meg:
root #blkid | grep sda3
/dev/sda3: UUID="d1e0c1e0-3a40-42c5-8931-cfa2c7deae32" TYPE="ext4" PARTUUID="adf55784-15d9-4ca3-bb3f-56de0b35d88d"
A partíció PARTUUID-ja különbözik a fájlrendszer UUID-jától. Az UUID a fájlrendszer egyedi partíciójára utal, és initramfs használatakor kell alkalmazni, míg a PARTUUID az adathordozó partíciójára vonatkozik, és kernelindításakor használható.
2. lehetőség: UEFI beállítása

Egy bejegyzés hozzáadásához kernel parancssori argumentumokkal:

root #efibootmgr --create --disk /dev/sda --label "Gentoo EFI Stub" --loader "\EFI\example\bzImage.efi" -u "root=/dev/sda3"
Important
A gyökér helyének beállítása egy PARTUUID segítségével, vagy (fájlrendszer) UUID használatával initramfs esetén általában előnyösebb és kevésbé hibára hajlamos.

További példák találhatók a Boot bejegyzés létrehozása részben.

Opcionális: Kernel initramfs fájllal

Amikor egy kernel külső initramfs képfájlt (CPIO archívumot) használ, további lépésekre van szükség. A dist-kernel létrehozásakor vagy genkernel használatakor mindig van initramfs képfájl. Dist-kernel használata esetén ez az initramfs "initrd" néven található a következő helyen: /usr/src/linux-6.1.57-gentoo-dist/arch/x86/boot/initrd. Ezt a fájlt szintén át kell másolni az ESP-be.

root #cp /path/to/my/initramfs/myinitrd.cpio.gz /efi/EFI/example/initrd.cpio.gz

Most már a kernelnek szüksége van az információra, hogy hol találja meg az initramfs képfájlt, és az initramfs képfájlnak is szüksége van az információra, hogy hol találja meg a gyökérpartícióját. Az UEFI-nek mindkét információt meg kell adnia:

root #efibootmgr -c -d /dev/sda -p 1 -L "Gentoo EFI Stub" -l '\EFI\example\bzImage.efi' -u 'root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx initrd=\EFI\example\initrd.cpio.gz'

Egy fórumbejegyzés részletesebben kifejti ezt, és megoldott néhány felhasználói hibát is. Ha szeretné, segíthetek megtalálni a kapcsolódó információkat vagy további részleteket.

Fórum téma - UEFI indítása Grub nélkül

Amikor Early Userspace Mounting-ot használunk, a Initramfs létrehozása és a Stub Kernel használata szakaszok részletesebben elmagyarázzák ezt.

Opcionális: Beágyazott initramfs képfájl

Az initramfs bináris képfájl közvetlenül beágyazható a bináris kernelbe. Ennek előnyei közé tartozik, hogy az initramfs képfájlt a Secure Boot ellenőrzi, amikor a kernelt ellenőrzi, egyszerűsíti az indítási folyamatot és az EFI partíciót, valamint megkönnyíti a kernel kézi betöltését (mivel a hívóknak már nem kell megadniuk az initramfs képfájlt). Hátrányai közé tartozik a rugalmasság csökkenése, a hibázás lehetősége, valamint egy nem hagyományos indítási beállítás használata.

Warning
Ha az initramfs tartalmaz Microcode-ot, akkor biztonsági szempontból kritikus fontosságú, hogy frissítéseket kapjon. Ha be van ágyazva, az initramfs nem frissíthető önállóan a kerneltől, és minden initramfs frissítéskor szükséges lesz a kernel újrafordítása. Különösen ügyeljen arra, hogy:
  • Ha a kernel újrafordítása előtt nem kerül végrehajtásra a
    root #make clean
    , akkor a
    root #rm usr/initramfs_data.cpio
    parancsot kell futtatni, hogy törölje az előző buildből visszamaradt, gyorsítótárazott initramfs CPIO archívumot.
  • Amikor az initramfs képfájl frissül, a kernelt újra létre kell hozni és telepíteni kell azt.
  • Ha az initramfs képfájlt a sys-apps/portage kezeli, akkor az initramfs a kernel előtt frissül.

A kernel támogatja mind a CPIO fájlokat (például, ahogyan Dracut létrehozza), mind a forráskönyvtárakat, amelyeket CPIO archívumba kell tömöríteni. Az alábbi példa az utóbbit mutatja a /usr/src/initramfs útvonallal, azonban a /path/to/my/initramfs/myinitrd.cpio.gz-re kell cserélni, ha az előző eset kívánatos (ez általában így van, hacsak nem Custom Initramfs-t használ).

KERNEL Az initramfs beágyazása a kernelbe
General Setup  --->
    [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
    (/usr/src/initramfs) Initramfs source file(s)
EFI firmware beállítása

A megfelelő működés biztosítása érdekében a kernel indítható az initrd parancssori argumentum nélkül.

A Unified Kernel Image bejegyzés létrehozásához:

root #efibootmgr --create --disk /dev/sda --label "Gentoo EFI Stub" --loader "\EFI\example\bzImage.efi"

Tartalék kernel

Ajánlott, hogy mindig legyen egy tartalék kernel. Ha már van telepítve egy bootkezelő, például grub, akkor azt nem szabad eltávolítani, mivel a grub képes stub kernelt indítani, mint egy normál kernelt. Egy másik lehetőség, hogy dolgozunk egy kiegészítő UEFI bejegyzéssel. Az új kernel telepítése előtt a jelenlegi kernel másolható a /efi/EFI/example/ útvonalról a /efi/EFI/backup helyre. A második UEFI bejegyzés szintén efibootmgr segítségével lett létrehozva. Ebben a példában más neveket használtak.

root #efibootmgr
BootCurrent: 0002
Timeout: 1 seconds
BootOrder: 0002,0000,0001
Boot0000* Secure        HD(1,GPT,0adcbfee-21aa-42ea-9a9a-2e53bd05e6a2,0x800,0x7f800)/File(\EFI\secure\bzImage.efi)
Boot0001* gentoo        HD(1,GPT,0adcbfee-21aa-42ea-9a9a-2e53bd05e6a2,0x800,0x7f800)/File(\EFI\gentoo\grubx64.efi)
Boot0002* Backup        HD(1,GPT,0adcbfee-21aa-42ea-9a9a-2e53bd05e6a2,0x800,0x7f800)/File(\EFI\backup\bzImage.efi)

Mikrokód betöltése

Amikor initramfs képfájl nélküli kernelt használunk, ajánlott betölteni a mikrokódot, amelyet az alábbi cikkek ismertetnek:

Opcionális: Aláírás a Secure Boot számára

Ha a kernelt a Secure Booting segítségével indítjuk, akkor azt alá kell írni az sbsign használatával, amely az app-crypt/sbsigntools szoftvercsomag része.

root #sbsign --key {db key} --cert {db cert} /efi/EFI/example/bzImage.efi

További információ érhető el a Secure Boot leírásban.

Warning
Nem lehet EFI Stub bootot végrehajtani a sys-boot/shim segítségével, mivel a vanilla EFI Stub hiányolja a szükséges .sbat sbat szekciót. Ezért az alkalmazott aláírókulcsokat közvetlenül a UEFI firmware-hez kell regisztrálni, hogy az EFI Stub boot Secure Boot engedélyezéssel működjön. Alternatív EFI Stub bootolási módszer, amely támogatja a shim-en keresztüli bootolást, a Unified Kernel Image wiki oldalon található.

Hibaelhárítás

Template:Tipp

A sys-kernel/gentoo-kernel-bin szoftvercsomagot használó felhasználók megadhatják a gyökérpartíció elérési útját a root= paraméterrel, a efibootmgr segítségével:

root #efibootmgr -c -L "Gentoo Linux" -l '\EFI\Gentoo\bootx64.efi' -u 'root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'
Boot bejegyzés létrehozása az efibootmgr segítségével, hibernálás swap partíción:
root #efibootmgr -c -L "Gentoo Linux" -l '\EFI\Gentoo\bootx64.efi' -u 'root=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX resume=PARTUUID=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX'

További olvasnivaló a témában

Külső források

Hivatkozások

  1. A kernel dokumentációjában a terminológia nincs egységesítve. A [1] dokumentációs oldal címe "(the) EFI Boot Stub", de az "EFI stub" kifejezés is használatos.