Portál AbcLinuxu, 4. července 2025 16:18
Zápas s (U)EFI na Samsung 900X
4.11.2012 12:02
| Přečteno: 2405×
|
| poslední úprava: 8.11.2012 00:27
Potřeboval jsem velmi lehký, ale ne úplně aušusový laptop pro případné cesty (cestování nenávidím, ale občas mi nic jiného nezbývá). Samsung 900X se zdál jako nejlepší volba, byť mi udělal v peněžence řádský průvan
Zároveň je to má první mašina s UEFI, takže zde popíšu svůj zápas s ním, pro případ, že se to někomu bude hodit. Myslím, že řada laptopů této generace se chová podobně nebo stejně. Pokud to, co tu píšu, už všichni víte, tak se omlouvám.
Laptop se prodává s předinstalovanými Windows 8, která se snaží uživatele nikam jinam nepustit: po spuštění ihned najedou, stisk vypínacího tlačítka je pouze zahibernuje, systém bootuje vždy z vnitřního disku, a pokud se něco podělá, při restartu se bez ptaní spustí automatická obnova, zkrátka Malý Měkký udělal všechno pro to, aby měl uživatel pocit, že jejich systém je neoddělitelnou součástí laptopu. Ale zbavit se jich přece jen dá.
Mé poznatky:
- Defaultně není nainstalován EFI Shell ani žádný bootloader, který by umožnil uživateli vybrat, co má startovat. Firmware nevypisuje ani žádné texty, které by ukázaly, o co se pokouší nebo co mu vadí; jediné, co je vidět, je logo Samsungu.
- Stisk klávesy F2 při bootu (ihned poté, co se objeví logo Samsungu, časové okno je 1-2 sekundy) otevře textový setup (vypadá stejně jako klasický BIOSový).
- Secure Boot je standardně zapnutý, ale v setupu se dá (a pro účely instalace musí) vypnout. Tím se smaže přednahraný Platform Key, ale zároveň se odblokuje možnost nahrát si vlastní klíče.
- V setupu lze nastavit bootování v režimu kompatibility s BIOSem - pak lze nastartovat z "normálního" instalačního CD/DVD, naformátovat disk DOSově a takto to používat, jako by tam EFI nebylo. Pozor: v tomto režimu nejde automaticky nainstalovat GRUB2, protože systém nevidí proměnné EFI. Ale bootovací oddíl EFI se dá namontovat ručně a zapsat tam svůj vlastní EFI bootloader (jak GRUB2, tak třeba elilo).
- EFI firmware bootuje jen a pouze ze souboru \EFI\BOOT\BOOTx64.EFI (case insensitive), ničeho jiného si nevšímá.
Proto nefunguje například bootovací USB Arch Linuxu, které má startovací soubor pojmenovaný trochu jinak. (UPDATE: Tak jednoduché to není, Arch má startovací binárku pojmenovanou správně, přesto ji Samsung neakceptuje, nevím proč.)
Disk má z výroby tabulku oddílů typu GPT (starší verze fdisk a spol. to nedokážou načíst, pak je třeba použít parted nebo gdisk). Oddíly jsou:
- Oddíl "Windows rescue", cca 500 MiB, formát FAT32, obsahuje EFI binárku, která se použije při automatické obnově widlí, a pomocné soubory. Při normálním startu se nepoužívá.
- EFI system partition, ze kterého systém bootuje, cca 300 MiB, formát FAT32. Start systému začíná spuštěním binárky
EFI/BOOT/BOOTx64.EFI
; všechno ostatní jsou pomocné soubory (několik adresářů a souborů je šalebně pojmenovaných, třeba EFI/Windows/Boot - firmware si jich nevšímá, nevím, jestli tam jsou pro zmatení nepřítele nebo co.)
- Systémový oddíl Windows.
- Datový oddíl (C:) Windows.
- Oddíl "Windows reserved". Pravděpodobně archív souborů pro obnovu.
- Další oddíl "Windows reserved".
USB disk pro bootování z EFI
Pro účely instalace se hodí mít USB disk bootovatelný z EFI. Ten lze vyrobit takto:
- USB disk rozdělíme pomocí normální DOSovské tabulky oddílů (hádám, že GPT by fungovala taky, ale nezkoušel jsem).
- Vytvoříme oddíl, kam přijde binárka EFI s případnými dodatečnými soubory; oddíl musí mít nastaven typ na 0xEF. Nemusí mít nastaven flag "bootable".
- Naformátujeme oddíl na FAT32 (pomocí
mkfs.vfat -F32
).
- Binárku, která se má spustit (například EFI Shell), je třeba uložit jako
EFI/BOOT/BOOTx64.efi
(velikost písmen není podstatná, je to FAT).
EFI Shell
Pro ladění se mi velmi hodil EFI Shell. Podobá se DOSu, takže je to dost hnus, ale umožňuje se pohybovat po filesystému, spouštět EFI aplikace a nastavovat různé věci. Lze ho stáhnout jako součást vývojového kitu pro EFI (soubor Edk 1.06.zip). Předkompilovaná binárka shellu je v Edk/Other/Maintained/Application/UefiShell/bin/x64/Shell_Full.efi
a nepotřebuje ke svému běhu žádné další soubory - stačí jen nakopírovat na USB disk jako EFI/BOOT/BOOTx64.efi
a mělo by to fungovat.
Samozavedení jádra z EFI
Od verze 3.6.4 (tuším) lze jádro přeložit tak, že funguje současně i jako EFI binárka, kterou lze přímo spustit třeba v EFI Shellu. V konfiguraci jádra je třeba zapnout volbu CONFIG_EFI_STUB. V nejjednodušším případě stačí výsledný soubor vmlinuz zkopírovat do EFI oddílu (opět pod jménem EFI/BOOT/BOOTx64.efi) a jádro při zapnutí ihned nabootuje stejně jako předtím Windows.
Protože takto spuštěné jádro nemá odkud načíst příkazovou řádku (zejména argument root=...
), musí se řádka přímo zabudovat do jádra - přinejmenším argument root=/dev/sd...
(volba CONFIG_CMDLINE_BOOL=y a CONFIG_CMDLINE=řetězec). Poznámka: Jádro verze 3.7 už umí načíst příkazovou řádku ze souboru, takže tam tento taneček odpadá.
Bootloader
Jako "opravdový" bootloader je možné použít elilo nebo GRUB2 (prý existuje i patchovaný GRUB 1, který umí EFI).
Elilo se chová mnohem lépe než LILO; instaluje se jednoduše zkopírováním binárky na bootovací disk (opět třeba přejmenovat na BOOTx64.efi), k němu je třeba přiložit textovou konfiguraci elilo.conf a soubory jádra (vmlinuz a případně initrd). To je vše. Elilo umí přepínat při startu mezi více jádry, ale neumí chainload, takže Windows nejde takto spustit.
Příklad elilo.conf (obšlehnutý odtud):
prompt
timeout=50
default=2639
#chooser=textmenu
image=vmlinuz-2.6.38-8-generic
label=linux
initrd=initrd.img-2.6.38-8-generic
read-only
root=/dev/sda4
append=""
image=bzImage-2.6.39
label=2639
initrd=initrd.img-2.6.39
read-only
root=/dev/sda4
append="reboot=a,w"
Odkazy
Dodatek: Díky Tomášovi Chvátalovi (scarabeus) za rady, jak se dostat za bootloader; bez něj bych to dělal ještě měsíc a hrozně bych se u toho nas...
Tiskni
Sdílej:
Komentáře
Vložit další komentář
4.11.2012 12:28
Bhua
EULA
4.11.2012 12:32
xkucf03 | skóre: 49
| blog:
xkucf03
Re: Zápas s (U)EFI na Samsung 900X
4.11.2012 15:07
Ondra
Re: Zápas s (U)EFI na Samsung 900X
4.11.2012 19:12
Kvakor
Re: Zápas s (U)EFI na Samsung 900X
5.11.2012 14:32
msk | skóre: 27
| blog:
msk
Re: Zápas s (U)EFI na Samsung 900X
Založit nové vlákno •
Nahoru
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.