Úvod do UEFI

30.07.2008 03:06 | vid

V tomto článku si povieme čo je zač UEFI štandard a ako to vyzerá s jeho podporou v praxi.

Na počiatku bol BIOS (Predpokládam že čitatelia vedia čo je BIOS a na čo slúži, takže to tu rozoberať nebudem). Bolo to v dobe, keď procesory bežali na 16bitový kód a počítač bol architekturálne obmedzený na 1MB RAM. Ako vývoj postupoval, prišli 32 a neskôr 64-bitové x86 procesory, pamäť pribúdala a menil sa aj spôsob prístupu k nej. BIOS ale kvôli spätnej kompatibilite stále zostával rovnaký. Táto situácia bola veľmi nepríjemná, keďže tým boli jednak veľmi obmedzené možnosti BIOS-u a aj loader operačného systému musel začínať v 16bitovom kóde, zvyčajne písanom v assembleri, ktorý musel zaviesť jadro systému len s využitím najzákladnejších služieb, ktoré BIOSy poskytovali už pred 20 rokmi. Nastoliť akýkoľvek nový štandard na tak veľmi pluralitnom trhu sa zdalo nemožné. Ale podarilo sa to!

Vývoj štandardu UEFI

Začalo to vtedy, keď sa Intel rozhodol vyvinúť 64-bitový procesor. Urobil logicky veľmi dobré, ale bohužiaľ trhovo nie príliš úspešné rozhodnutie: zbaviť sa všetkých prežitkov a príťaží x86 a vytvoriť úplne novú architektúru - "Itanium" ("IA64"). To však znamenalo okrem iného aj to, že staré BIOSy na nej už nepobežia a teda sa núkala príležitosť vytvoriť nové rozhranie medzi operačným systémom a hardwarom/firmwarom. Takto niekedy v polovici 90tych rokov vznikli prvé navrhy náhrady BIOSu, zvanej "Extended Firmware Interface" ("EFI").
http://www.intel.com/technology/efi/

EFI sa od starého BIOSu veľmi odlišuje: poskytuje široké spektrum funkcionality ešte predtým, než sa vôbec začne naťahovať OS, modulárnosť (umožňuje pridávať vlastné drivery), beží na rôznych platformách, programy a drivery sa píšu priamo v Céčku a nie v Assembleri, sú teda ľahko portabilne, atď. EFI okrem native kódu procesoru podporuje aj vlastný byte-code, takže ovládače je možné skompilovať tak, že budu aj binárne prenosné medzi procesormi bez nutnosti rekompilácie.

V roku 2000 bola zverejnená prva špecifikácia (EFI 1.02), ktorá bola ale rýchlo kvôli legálnym problémom stiahnutá, a v roku 2002 bola zverejnená druhá špefikácia (EFI 1.10). Vďaka horespomenutým vlastnostiam, táto špecifikácia nebola obmedzená len na procesory Itanium, ale podporovala aj 32-bitové x86 procesory.

Aby sa predišlo roztrieštenosti a aby sa EFI stalo naozaj jednotným štandardom, akým bol BIOS, vzniklo v roku 2005 konzorcium najväčších "hráčov" na trhu, ktoré prebralo špecifikaciu EFI 1.10 a ďalej ju rozvija. Patria sem mená ako Intel, AMD, AMI, Apple, Dell, HP, IBM, Microsoft, Phoenix, atď. Takto vznikla prvá verzia "Unified EFI" ("UEFI"). Títo ďalej rozvíjaju špecifikáciu, zverejňujú ju a snažia sa o rozširovanie tejto technológie na trhu. Stále sa však často používa nazov EFI, aj ked sa myslí UEFI.

Neskôr AMD vyvinulo vlastnú 64-bitovú technológiu, ktorá narozdiel od Itania bola spätne kompatibilná
s x86 procesormi - "AMD64" (Intel ju nazýval "EM64T" alebo "IA32-64", neskôr "Intel64", Microsoft ju
nazýva "x64", normálne ju ľuďia volajú "x86-64"). Podpora pre ňu bola zahrnutá do novej major verzie
štandardu "UEFI 2.0". V apríli 2008 sa k UEFI dokonca pridal aj ARM, takže sa v blízkej dobe očakáva
aj podpora týchto procesorov.

V čase písania tohoto článku je najnovšia verzia štandardu UEFI 2.1, ktorá obsahuje niekoľko drobných zmien a možností oproti UEFI 2.0. Celkovo sú však tieto štandardy veľmi silne spätne kompatibilné, takže softvér/ovládače písané pre prvú verziu EFI bežia aj na najnovších doskách.

Špecifikácie týchto štandardov nájdete na stránkach UEFI konzorcia: (treba vyplniť dotazník)
http://www.uefi.org

Implementácie

Ďalšia potrebná vec preto, aby UEFI bolo naozaj ozajstným štandardom, okrem špecifikácie, je implementácia v praxi na skutočnom hardwari. Intel mal svoju pôvodnú implementáciu štandardu EFI 1.10, nazvanú "Platform Innovation Framework", skrátene "Framework", ľudový názov projektu u programátorov bol "Tiano". Z nej Intel uvoľnil v roku 2005 základnu časť pod názvom "TianoCore", prípadne "EFI Development Kit" ("EDK"). Tento projekt sa stal open source a ďalej ho spolu s Intelom rozvíja komunita z celého sveta. TianoCore obsahuje všeobecný kód implementácie rôznych verzii UEFI štandardu, ale neobsahuje žiadne drivery (HW-specific kód) a tiež neobsahuje kód pre úvodné fázy bootovania.

Okrem TianoCore existuje niekoľko komerčných implementácií (založených na TianoCore), ktoré ponúkaju extra funkcionalitu a podporu HW. Na platformách využívajúcich procesory Itanium je EFI samozrejmosťou, takže ďalej popíšem len situáciu ohľadne podpory na x86 doskách.

Intel naďalej rozvíja Tiano a podľa mojich informácii je prvou spoločnosťou, ktorá uviedla na trh x86-64 dosky s podporou UEFI 2.0. Dosky s podporou UEFI 2.0, o ktorých viem, sú DQ35JO, DQ35MP, DP35DP, DG33TL, DG33BU, DG33FB. Dosiek s podporou 32-bit UEFI štandardov je pravdepodobne neúrekom, ale o tieto som sa nezaujímal.

Prvou spoločnosťou okrem Intelu, ktorá podporovala EFI, je spoločnosť Insyde. Táto ponúka svoju implementáciu InsydeH2O, prípadne jej osekanú verziu InsydeDIY. Zdá sa že tieto podporuju len EFI/UEFI 1.x, keďže Insyde nikde nespomína UEFI 2.0 a na zozname podporovaných procesorov nieje AMD64.

Phoenix Technologies podporuje štandard UEFI 2.0 v radách SecureCore, TrustedCore a AwardCore Tiano. Taktiež k TrustedCore poskytuje aj prostredie na vývoj vlastných driverov - "UEFI Platform Initialization DDK".
http://www.phoenix.com/en/Products/Browse+by+Products/TrustedCore/defaul...
http://www.phoenix.com/en/Products/Browse+by+Products/Phoenix+SecureCore...
http://www.phoenix.com/en/Products/Browse+by+Products/AwardCore+Tiano/de...

AMI (American Megatrends Inc.) podporuje štandard UEFI 2.0 vo svojej kódovej základni "Aptio": http://www.ami.com/aptio/. Implementáciu Aptia v 32-bitovej verzii nájdeme na základnych doskách "Efinity" od "MSI" a veľmi skoro očakávame aj implementaciu UEFI 2.x na doskách rady "MSI 45". Použitie Aptia tiež ohlásil ASUS, ale o žiadnom konkrétnom x86 produkte od Asusu s EFI neviem.

AMI navyše ponúka source-level debugger pre UEFI moduly, kompatibilný aj s TianoCore EDK:
http://www.ami.com/support/doc/AMI_Debug_UEFI_Dsheet_PUB_2008-06-10.pdf

Existuje aj silne zastaraný projekt "gnu-efi", ktorý poskytuje C headery pre EFI 1.02 štandard:
http://gnu-efi.sourceforge.net/

Keďže UEFI štandard definuje aj presný binárny interface, jednotlivé UEFI drivery a aplikacie sú prenositeľné medzi rôznymi implementáciami. Všetky verzie štandardu by tiež mali byž spätne kompatibilné. (Týmto si niesom na 100% istý, ale každopádne rozdiely sú minimalné)

UEFI štandard taktiež umožňuje bootovať systém "starým spôsobom", takže je možné ho použiť aj so systémami, ktoré nemajú podporu UEFI, ibaže v tomto prípade sa už nedajú pouziť UEFI run-time drajvre. V praxi preto dosky obsahujú aj kompletný oldschoolový BIOS, aj UEFI.

Podpora OS

Ďalsou zaujímavou témou je, ktoré operačné systémy podporujú UEFI štandard.

Všetky OS pre procesory Itanium podporujú EFI/UEFI, keďže tam je táto technologia, pokiaľ viem, jediným štandardom. Čo sa týka x86, situácia je komplikovanejšia:

Windows Vista podporuje UEFI od Service Packu 1, ale len v 64-bit verzii. To teda znamená, že vyžaduje implementáciu UEFI 2.x, čo je problém zohnať. Jediné dostupné dosky s UEFI 2.0 sú momentálne tie od Intelu, ale keď som v praxi skúšal na túto inštalovať Vistu SP1, tak tá mi zahlásila že jej chýba implementovaná nejaká podpora ACPI, takže asi toľko. Netrpezlivo sa očakáva BIOS update od MSI, ktorý ako ďalší prinesie na trh podporu UEFI 2.0.

Taktiež Windows Server 2008 podporuje UEFI v 64-bit verzii:
http://www.microsoft.com/whdc/system/platform/firmware/uefireg.mspx

Apple Mac OS X vo verziach s Intel procesorom využíva EFI 1.10. Avšak používa 32-bit verziu EFI aj na 64bitových procesoroch.

Čo sa týka Linuxu, "lilo" aj "grub" podporujú UEFI pre 32-bitové aj 64-bitové procesory a obidva existujú aj v Itanium verzii: (ale v praxi som ich neskúšal)
http://elilo.sourceforge.net/cgi-bin/blosxom
http://packages.debian.org/sid/grub-efi

Zdá sa, že BSD operačné systémy v x86 verziách nepodporujú bootovanie pomocou UEFI.

Podpora driverov

Vo všeobecnosti platí, že firmy ktoré patria do UEFI konzorcia, poskytujú pre svoj HW aj UEFI drajvre. Mne sa však tieto nikde nepodarilo nájst samostatne na stiahnutie a zrejme sa poskytujú len ako súčasti "kompletných riešení" spomenutých vyššie.

Nabudúce?

Ak sa vyhecujem, tak čoskoro spravím aj článok, kde popíšem praktickú prácu s UEFI a dám aj ukážky UEFI programovania.

PS: Aby sme tu nemali len samú chválu, Linus si nostalgicky zanadával na takéto novoty, čo tí mladí haranti vymýšľajú a na to aké bolo za starých časov všetko jednoduchšie:
http://kerneltrap.org/node/6884

    • Re: Úvod do UEFI 30.07.2008 | 10:44
      Avatar blackhole   Návštevník

      Díky za zajímavej článek.

      Kdy se dá čekat, že se bude UEFI vyskytovat v běžně dostupných 64bitových PCs? (Počítám, že snad už brzo budou všechny 64bitový). Pokud to podporuje Vista, dá se to brzo očekávat, nebo to budou ještě brzdit výrobci desek?

      A další otázka, UEFI už nějak obsahuje původní BIOS? Pokud ne, může jedna deska podporovat jak původní BIOS, tak UEFI?

      • Re: Úvod do UEFI 30.07.2008 | 18:13
        Avatar vid   Používateľ

        Kdy se dá čekat, že se bude UEFI vyskytovat v běžně dostupných 64bitových PCs? (Počítám, že snad už brzo budou všechny 64bitový). Pokud to podporuje Vista, dá se to brzo očekávat, nebo to budou ještě brzdit výrobci desek?

        Myslim ze akonahle to ti vyrobcovia dosiek ktorych som spominal dokoncia (hlavne MSI to uz malo mat hotove, ale odlozili to do augusta), tak to uz budu pchat vsade, ale to je len moj tip.

        A další otázka, UEFI už nějak obsahuje původní BIOS? Pokud ne, může jedna deska podporovat jak původní BIOS, tak UEFI?
        Nieco som k clanku napisal... UEFI sice ma podporu aj spustenia 16bit real mode bootloaderu, ale v tomto pripade v pamati nezostanu UEFI drajvre, a teda su sluzby BIOSu obmedzene - takto nejako sa to pise v ofic dokumentoch. Tipujem ze nemas ACPI, SMBIOS, a tie vselijake vychytavky. Preto sa bootovanie real mode kodu cez UEFI asi vobec nepouziva, a preto v praxi dnes na doskach ktore podporuju UEFI, je vzdy aj BIOS, a UEFI bootovanie je len jedna volitelna featura v nastaveniach BIOSu. Cize vsetko funguje po starom, skor je problem ked kupujes dosku zistit ci ma AJ podporu UEFI.

    • Re: Úvod do UEFI 31.07.2008 | 19:22
      Avatar blackhole   Návštevník

      Troska OT, ale pacil sa mi prispevok do diskusie pod tymi Linusovymi mailami, Windows says where to you want to go today and Linux goes there !

      + vid, na tomto je pravdy kolko?

      Windows does NOT support EFI
      July 28, 2006 - 12:47pm
      Anonymous (not verified)

      Windows does NOT support EFI on x86 systems.

      August 6, 2006 - 11:57am
      Anonymous (not verified)

      Vista does.

      August 10, 2006 - 9:32am
      Darren Winsper (not verified)

      No, they dropped that feature.

      ================================================================= CUT HERE
      Running on Ubuntu 8.04, Win Vista Ultimate [a legal! :)], Symbian S60v9.1, Symbian S40, WM6

      • Re: Úvod do UEFI 01.08.2008 | 03:27
        Avatar vid   Používateľ

        Pokial za "x86 systems" pokladas len 32bitove x86, tak je to pravda. Microsoft si povedal ze podporu 32bitovych implementacii EFI robit nebude, lebo 32bit veci su uz aj tak na ustupe a bolo by omnoho viac roboty/testovania.

        Na 64-bitovych x86 Windowsy podporu EFI jednoznacne maju - dnes mi dosla dalsia doska s podporou 64bit UEFI 2.0, a instaloval som tam Vistu SP1 v EFI verzii. Taktiez Server 2008 ma podporu EFI. (Inac tu vistu som nedoinstaloval, lebo ako som zistil EFI verzie windofsov vyzaduju GUID Partition Table (GPT), nepodporuju Master Boot Record (MBR), a uz sa mi s tym nechcelo kakat).

        A v tomto pripade to "nepovedal Windows", bolo to forum zlozene zo zastupcov mnohych hlavnych HW a BIOS spolocnosti, takze nenasledovat to by bolo trochu idiotske, mozeme byt radi ze konecne sa aspon nieco podarilo ako-tak ujednotit. A ked uz by sme chceli nejaku spolocnost vyclenit co za tym stoji najviac, tak to je Intel.

        V poslednej dobe sa mi inac Intel coraz viacej paci, su dost otvoreni, maju velmi peknu podporu pre komunitu, pri troche stastia si mozes pokecat priamo s vyvojarmi od nich (a nemusis za to platit 2000$/rok ako u Microsoftu), a to ako prednedavnom kompletne zverejnili specifikaciu grafickej karty bol tiez krok tym smerom kde chceme byt.

        • Re: Úvod do UEFI 01.08.2008 | 08:49
          Avatar blackhole   Návštevník

          Jj, dik, myslel som si ze by bola picovina keby to v 64b nebolo.....

          Running on Ubuntu 8.04, Win Vista Ultimate [a legal! :)], Symbian S60v9.1, Symbian S40, WM6

    • UEFI programovanie 31.03.2009 | 13:04
      Avatar vid   Používateľ

      Upozornujem ze som dokoncil pokracovanie tohoto clanku, najdete ho tu: http://x86asm.net/articles/uefi-programming-first-steps/index.html

      Vzhladom na dost specificku temu nevidim dovod trapit sa s prekladom do slovenciny, a preto to ani nedavam priamo sem na blackhole.