Sziasztok!
Írni szeretnék - már lehet, hogy ezerszer kivesézett történetről-, az UEFI-ről. és az MS viszonyáról.
(Tudom-tudom gyakorlatilag az MS fájlformátumát és fájlrendszerét használja az ESP és az .EFI binárisokhoz, tehát elég sok köze van a szabvány megalkotásához. (Meg az Intelnek is főleg, az EFI-ből lett továbbfejlesztve maga az UEFI…)
Pár évvel ezelőtt gondoltam, hogy ahol lehet, én is átállok erre az új szabványra a régi Legacy/BIOS-ról az itthoni eszközeimen.
Innentől kezdődnek az érdekességek, de az egyik általam használt laptopról szeretnék írni, ami még furábban viselkedik így, mint ahogy el tudtam volna képzelni.
A laptop egy HP 2170p Elitebook. 12”, I5-3xxx processzorral, 8 GB DDR-3-as rammal, SSD-vel.
Ahogy az lenni szokott az ember feltelepít egy Windows-t rá, mert néha-néha azt is szoktam használni, de elsősorban GNU/Linux-os gépnek képzeltem el.
Minden remekül ment a telepítésekkel (Debian 11.6-os Linux és egy Windows 10). Szépen működik a dual boot grub2-vel. DE, innentől kezdődnek az „anomáliák”.
A laptop firmware-je a szokásos HP-s, viszont érdekes az UEFI implementációja. Ugyanis, amikor csak magában akartam feltelepíteni a korábban említett disztribúciót, akkor ahogy kell, lement a telepítés és jött az újraindítás. Ekkor fogadott az első meglepő dolog, hogy nincs operációs rendszer a gépen, nyomj egy gombot és kikapcsolok. :D Mondom mitt, holl? :D
No, gondoltam beletúrunk már a beállításokban, hogy hogyan lehet ezt megoldani.
Debian alatt egy efibootmgr -v parancs hatására, kijött szépen, hogy megvan a debian-hoz tartozó bejegyzés, ahogy annak lennie kell, szépen a boot order-ban megadott első helyen. Újraindítottam, ugyan úgy nincs OS és kikapcsolok üzenet fogadott.
Mondom érdekes, érdekes. Természetesen beépített UEFI shell nincsen, még menüpont sincsen hozzá, bejegyzésnek híre-hamva se az nvram-ban.
Ahogy elkezdtem telepíteni a Windows 10-et az rendben felment, és kapásból újraindítás után el is indult. No mondom remek, ahogy szoktam módosítottam a Windows Boot Manager bejegyzését a következő szerint:
bcdedit /set {bootmgr} path \EFI\debian\grubx64.efi
Ez általában megoldja, hogy a windows boot manager-e magát a grub-ot töltse be és onnan lehet választani hogy mit indítok.
DE nem ezzel a géppel, mert ezt, így beállítva és debian alól megnézve az nvram-ot is ahol a korábban megadott útvonallal van megadva a grub, SE a grub indul el, hanem a szabványos windows boot manager! Áh, mondom van ilyen?
Ahogy elnéztem a bizonyítékokat, ebben az UEFI BIOS-ban kajak hard kódolva van a windows-os rendszerbetöltő, és ha az nincs a gépen, tehát nem windows van telepítve, akkor szerinte nincs is operációs rendszer… Remek.
Szerencsére van olyan opció a firmware-ban hogy custom boot entry, és oda be lehet írni hogy \EFI\debian\grubx64.efi, és a boot ordert a custom entry-re állítom, akkor azt is indítja el, tehát bejön a grub menüje.
Ha nem lenne ilyen opció, akkor rendesen át kellene neveznem a grubx64.efi fájlt a windows-os rendszerbetöltőre, hogy azt higgye, hogy van windows telepítve.
A korábbi bcdedt-es sor egy Asrock alaplapos asztali gépben szerencsére működik, de az is „imádja” a windows-t.
Szóval röviden, az MS rendesen elveszi a felhasználó kedvét attól, hogy a saját rendszerén kívül, mást merjél használni. Függőség. Ez a fontos nekik, de ezt már sokan írták, így nagy igazságot nem írtam meg én sem.
Az egész bejegyzés eredetileg azért jött létre, mert szerettem volna magát a GNU/Linux kernelt GRUB2, mint köztes rendszerbetöltő nélkül, tisztán UEFI-vel indítani, mivel maga az is egy rendszerbetöltő.
Ezt sajnos nem tudtam megtenni, mert ezen a gépen eleve nincsen EFI shell, valamint a custom entry-ben, ahová kézzel kell beírni magát a futtatni kívánt .EFI fájlt nem lehet megadni paramétereket, mint a root fs és az initrd kép nevét a kernelnek, így eleve kernel pánikkal lehal az egész.
Nagy nehezen találtam a HP oldalán egy HP logót lecserélő topicot, ahol megemlítik, hogy külön kell egy EFI binárisba fordított EFI shell fájlt letölteni és azt indítani, hogy legyen shell, ami 1.1.2-es verziójú, és nem tartalmazza a bcfg parancsot, hogy lehessen manipulálni a boot bejegyzéseket.
Debian alatt bárhogy bűvészkedtem a efibootmgr paranccsal, hiába jelenik meg a nvram-ban is a bejegyzés a rendszer indítás során figyelembe se veszi őket.
Lehetőség van, hogy az f9-es boot-menü-ből válasszak hogy mit akarok indítani, ahol lehet tallózni az EFI partíción .efi fájlok után kutatva, de innen kiesik a paraméterekkel való indítás, mert nem támogatja a rendszer.
Gondoltam írok valahogy egy egyedi .efi binárist, ami betölti magát a kernelt és az initrd-t és paraméterként megadja a root UUID-ját, de áh… Akkor gyakorlatilag az egy kezdetleges rendszerbetöltőt jelentene, ami már van a rendszerben a GRUB…
Sajnos a törekvésem, hogy közvetlenül a UEFI BIOS indítsa a kenrelt dugába dőlt…
Marad a custom boot entry...
- jimmy399 blogja
- A hozzászóláshoz be kell jelentkezni
- 432 megtekintés
Hozzászólások
Fixme, de szerintem ez inkább a HP UEFI "implementációjának" a szégyene, mint hogy itt az MS erőltetne bármit is :) Bocs nem az MS-t akarom ezzel védeni.
- A hozzászóláshoz be kell jelentkezni
+1
- A hozzászóláshoz be kell jelentkezni
Az is igaz, hogy a hp implementációja tré...
Másik masinán meg kísérleti jellegű uefi van figyelneztet is a bios.
Bootol egy arch rajta, addig semmilyen kép nincs rajta amíg nem jön a login a tty-n, pedig a kernel paraméterek között szerepel a verbose, de egy kernel üzenet se látszik.
- A hozzászóláshoz be kell jelentkezni
Milyen EFI shell-t próbáltál? tianocore-félét, vagy valami mást? (Mondjuk nekem is az rémlik, hogy amikor utoljára láttam, akkor bcfg nem volt benne, de mivel azért az nem ma volt, azóta javulhatott is.)
- A hozzászóláshoz be kell jelentkezni
Sosem hallottam erről a tianocore shellről. Tölöttem le a netről különféle efi shell-eket, de a HP saját shelljét szedtem le, amit ahhoz mellékeltek, hogy le lehessen cserélni a gyári HP logót POST során.
- A hozzászóláshoz be kell jelentkezni
Az mit jelent, hogy a custom boot entryben nem enged paramétereket megadni? Csak efibootmgr -l megy de -u már nem? Vagy semmi nem megy ami efibootmgr? Csak mert az initrd-t tudtommal össze tudod forrasztani a kernellel egy binárisba így a paramétereket is belerakhatod abba.
- A hozzászóláshoz be kell jelentkezni
A custom boot enty fix hosszúságú karaktereket enged beírni, kb 20-30 -at. Ott is magadtam legalább az initrd sort de nem is indult el, mert azt is parancsnak érzékelte, mármint elérési útnak. Az -l és -u- val is próbáltam, egyik se vezetett sikerre, bárhogy is kombináltam bármit.
Azt nem tudom, hogy a initrd és a kernel mehet egy binárisba, de utánanázek.
- A hozzászóláshoz be kell jelentkezni
Köszönöm a tippet, nem tudtam róla, hogy van ilyen lehetőség:
"...az initrd-t tudtommal össze tudod forrasztani a kernellel egy binárisba így a paramétereket is belerakhatod abba."
Igen, a systemd-ukify python modullal meg lehet csinálni. Feltettem egy virtuális gépbe egy Arch linuxot, telepítettem a ukify-t felparamétereztem, majd megadtam neki a debian kernel és initrd image-ket, és legeneráltam egy .efi binárisba.
Csodálatosan bootol a rendszer. Custom entrybe meg is adtam hogy ezt töltse be az induláskor a rendszer.
Így ha kernel frissítés van, akkor csak legenerálom újra ezt a scriptet és kész. Amúgy még tesztelem így a rendszert, de első indításra minden rendben van. Amúgy teszt jelleggel a debian 5.10-es kernellel megcsináltam ezt a virtuális gépben majd azzal is be tudtam bootolni a legújabb 6.2.xx kernel helyett az Arch-ot... :D
Ezer köszönet!
- A hozzászóláshoz be kell jelentkezni
Szuper! Azt hiszem igazából nem is kell kézzel lefuttatni ezt a scriptet kernel frissítés után. Debianban legalábbis van egy post install hook, amihez tartozik egy könyvtár és az oda bepakolt scripteket kernel telepítés vagy frissítés után le futtatja a rendszer. Tutira megvan ennek az archos megfelelője is.
- A hozzászóláshoz be kell jelentkezni
Az asztali gépen is kipróbáltam ezt a ukify scriptet, de sajnos nem sikerült helyesen legenerálni az efi képet, mert amikor az interkatív uefi shellben elindítom a képfájlt, akkor arra hivatkozva kidob az initramfs shell-be hogy nincs meg a kernel paraméterben megadott root partíció.
Érdekes, mert a laptopon a HP-n simán jól megy, itt meg valamiért nem működik, bár manuálisan felcsatolom a megfelelő partíciót akkor elindul a rendszer, de úgy meg nem az igazi.
Az ukify-t --cmdline "root=bla-bla-bla ro quiet" majd --cmdline 'root=bla-bla-bla ro quiet' esetleg a --cmdline="root=bla-bla-bla ro quiet" vagy --cmdline='root=bla-bla-bla ro quiet' -al indítva is ugyan ez a helyzet, szóval nem tudom mi lehet a gond. Bár írja az ukify oldala, hogy erősen béta és kísérleti jellegű, lehet hogy az Asrock FM2 A75 pro4m uefi implementációja, vagy maga a hadverfelépítés másabb, ami miatt nem megfelelően indul a kernel és nem találja a root-ot.
- A hozzászóláshoz be kell jelentkezni
Nincs a BIOS-ban BIOS-kompatibilis üzemmód (Esetleg CSM néven)? Persze lehet, hogy úgy meg nem indul el a Windows...
- A hozzászóláshoz be kell jelentkezni
Ha egy OS UEFI módban lett telepítve, akkor az nem fogja szeretni, ha a háttérben visszamégy BIOS-kompat-ba. Amúgy pedig kb. 20 éve van EFI / UEFI, és lassan itt az ideje, hogy ahogyan az ember megtanult a különböző gyártók BIOS-sajátosságaival is együttélni, ugyanúgy nagyon itt az ideje az egyes gyártók hibás / hiányos UEFI-implementációinak sajátosságait is tudni kikerülni, Nyilván ez egy lassú folyamat.
- A hozzászóláshoz be kell jelentkezni
Off: Egy boldogabb világban nem 6000+ oldalas szabványokat kell a gyártóknak hibásan/hiányosan impelementálniuk.
Szerk: durván túloztam, mindössze 2000+ oldal, mondhatni könnyű esti olvasmány
https://uefi.org/sites/default/files/resources/UEFI_Spec_2_10_Aug29.pdf
- A hozzászóláshoz be kell jelentkezni
Van benne, de akkor a win nem indulna :)
- A hozzászóláshoz be kell jelentkezni
Pár hete vettem egy HP notit (használt, újszerű, 120k szállítással), ilyen:
Machine:
Type: Laptop System: HP product: HP Laptop 15s-eq2xxx v: N/A
serial: <filter> Chassis: type: 10 serial: <filter>
Mobo: HP model: 887A v: 59.21 serial: <filter> UEFI: AMI v: F.27
date: 10/20/2022
Battery:
ID-1: BAT0 charge: 37.8 Wh (100.0%)
condition: 37.8/37.8 Wh (100.0%) volts: 12.8 min: 11.3
model: HP Primary type: Li-ion serial: <filter> status: Full
CPU:
Info: 6-Core model: AMD Ryzen 5 5500U with Radeon Graphics
(Eredetileg nem HP-t akartam venni, de a procija megtetszett.)
Nem kínlódtam előtte UEFI-vel, most picit kellett, ez AMI BIOS-os noti, és custom entry sincs, ahol be lehet írni másik efit. Illetve van egy menüpont, ahol be lehet tallózni más efi fájlokat a fat32 partícióról.
Azt hittem, majd ilyen ukify kínlódás lesz, de egyszerűbb lett.
Felraktam a /efi-be egy Grub4DOS efit, a Bootice progival beírtam az UEFI menübe, beszerkesztettem a menu.lst-be a ramból futó MX linuxom, és megy szépen. Plusz a menu.lst-ben lévő disket választva bootol a G4DOS-ból a win10 is. (Egyelőre nem próbáltam, hogy a win törlése mit okozna, majd ha lesz másik nvme, akkor megnézem.) Mondjuk szerintem menne simán.
Egyébként egy másik notit javítgatva felraktam egy USB flashre egy win10 telepítőt, egy SSTR-t, meg a saját linuxomat is, és azon az SSTR GRUB2-jéből remekül megy minden, szóval a grub2 efivel is OK minden. (Egyébként a másik noti egy Lenovo V15 G4 AMN, de az UEFI-je hasonlóan gagyi, meg még a touchpad és a saját bilentyűzete se megy az MX23-on. :D)
Szóval így már nem is bánom a HP-t! :D
- A hozzászóláshoz be kell jelentkezni
Annyit még lehet csinálni, hogyha az UEFI-be be van drótozva, hogy ha létezik a /EFI/Microsoft/Boot/bootmgfw.efi fájl, akkor mindenáron azt indítsa el, hogy ezt a fájlt felülcsapni magával a grub.efi-vel és akkor maga a grub indul el.
Vagy pedig magában a windows parancssorban beállítani, hogy a grub.efi-re mutasson a bcdeditorral a path.
- A hozzászóláshoz be kell jelentkezni