Uefi of bios: Overeenkomsten en verschillen

Kort na het inschakelen van je pc geeft je besturingssysteem de eerste tekenen van leven, zoals een logo of een welkomstscherm. In de tussentijd moet er heel wat gebeuren om de opstart van het besturingssysteem mogelijk te maken. Uefi, dat tussen de systeemfirmware en het besturingssysteem zit, maakt dat mogelijk.

Uefi (Unified Extensible Firmware Specification) is een specificatie die een software-interface definieert tussen de systeemfirmware en een besturingssysteem. Uefi kun je zien als de opvolger van het bios en is vooral bedoeld om het initiële opstartproces veiliger, sneller en flexibeler te maken.

Er wordt vaak gezegd dat uefi een complete vervanging is van het aloude bios (Basic Input Output System), maar dat is niet helemaal correct. Immers, zowel ‘legacy’- als uefi-gebaseerde moederborden hebben bios-rom’s aan boord. Die bevatten firmware die instaat voor de initiële opstartconfiguratie voordat programmacode in het geheugen wordt geladen en uitgevoerd.

Het belangrijkste verschil tussen de firmware van een legacy-bios en van een uefi-bios is waar die code wordt opgehaald, hoe het systeem voor de uitvoering van die code wordt voorbereid en welke extra functies voor die code beschikbaar zijn.

Legacy-bios

Om te begrijpen waarom uefi nodig was, is enig inzicht in het traditionele legacy-bios nodig. Op zo’n legacy-systeem voert het bios de gebruikelijke initialisaties uit, zoals de configuratie van de geheugencontroller, de pci-bus en de grafische kaart. Vervolgens valt het systeem tijdelijk terug in een neerwaarts-compatibele ‘real mode’, met slechts ca. 1 MB direct aanspreekbaar geheugen. Dat was knap lastig voor fabrikanten van bijvoorbeeld interfaces als usb, eSATA en thunderbolt knap lastig.

Verder, om te kunnen booten, verwacht dit bios ook een mbr-partitie (Master Boot Record) op de eerste fysieke schijfsector. Aangezien de partitietabel het aantal sectoren (standaard 512 bytes) via een 32bit-waarde aangeeft, levert dat een maximale bootschijf-grootte van zo’n 2 TB op, wat tegenwoordig erg beperkt is. Ondanks enkele zinvolle uitbreidingen, waaronder ACPI (Advanced Configuration and Power Interface), is het legacy-bios er niet in geslaagd alle moderne ontwikkelingen en systeemvereisten bij te houden.

Van IBI naar uefi

Uefi lost dergelijke tekortkomingen op en heeft nog enkele nuttige extra’s. Alles begon met de efi-specificatie, zijn beurt de verderzetting van het IBI-project (Intel Boot Initiative) uit 1998. Deze specificatie werd ontwikkeld door Intel bij het lanceren van de Itanium server-processors. Het bedrijf zocht namelijk naar een flexibelere methode voor de controletransitie tussen de hardware en het besturingssysteem.

De Itanium-servers leverde helaas niet het gehoopte succes op en het efi-project kwijnde weg, tot efi 1.1 door het Unified EFI Forum werd opgepikt, met als resultaat de release van uefi 2.0 begin 2006. Intussen hebben vele tientallen bedrijven zich hierbij aangesloten.

Basiskenmerken

Uefi bracht al meteen enkele verbeteringen. Terwijl een legacy-bios standaard beperkt is tot een 16bit-processormodus, kan uefi zowel met 32- als 64bit-modi overweg. Firmware-implementaties met een 64bit-uefi ondersteunen overigens de zogenoemde ‘long mode’ waardoor applicaties reeds in de PE-omgeving (Preboot Environment) via 64bit-geheugenadressering al het beschikbare geheugen kunnen aanspreken. Dit vereist dan wel een match tussen de firmware en de besturingssysteem-bootloader en kernel: 64bit-uefi-firmwares kunnen dus uitsluitend een 64bit-besturingssysteem laden.

Uefi definieert ook een nieuwe standaardlay-out voor de partitietabel, de gpt (Guid Partition Table). Die rekent met enkele vervelende beperkingen van mbr af: in theorie zijn nu 128 primaire partities mogelijk tot wel 9,4 ZB (zettabyte).

Ook het eigenlijke bootproces is nu veel flexibeler. Zo kan uefi-firmware een willekeurige uefi-applicatie – lees: een pe-executable – in een geheugenadres laden dat tijdens runtime wordt bepaald. Zo’n applicatie kan de controle ook weer teruggeven aan de firmware, waarna die naar een ander bootmedium zoekt of bijvoorbeeld een diagnostisch menu toont.

Bij het uitvoeren van zo’n applicatie geeft de firmware tevens een systeemtabel door met verwijzingen naar allerlei informatie die relevant is voor het besturingssysteem, zoals acpi-tabellen en de geheugenmap. Er zijn trouwens verschillende types – zinvolle – uefi-applicaties mogelijk, waaronder configuratie- en optimalisatietools, diagnostische tools en beveiligingsapplicaties, zoals antimalwarescanners en schijfencryptietools.

Booten met klasse

Een speciaal soort uefi-applicaties zijn de besturingssysteem-bootloaders, die uiteindelijk de controle doorgeven aan het besturingssysteem. Uefi hangt dus niet af van een vaste bootsector, zoals bij het legacy-bios. Uefi kan zo’n besturingssysteem-bootloader (mede op basis van de systeemarchitectuur) immers automatisch detecteren, wat ook het opstarten van verwijderbare media vereenvoudigd. Zo is het standaardpad naar zo’n besturingssysteem-bootloader op een x86-64-machine /efi/BOOT, op een doorgaans verborgen en fat-geformatteerde efi-systeempartitie oftewel ESP, met als eigenlijke bootloaders bijvoorbeeld bootx64.efi of grubx64.efi.

Om voor gebruikers van wat oudere systemen de overgang van het legacy-bios (ook wel uefi-klasse 0 genoemd) naar uefi te vergemakkelijken, werd het uefi-platform in een aantal klassen onderverdeeld. Veel besturingssystemen in de beginjaren van uefi waren namelijk niet geschikt voor uefi en daarom werd met uefi-klasse 1 een speciale csm-modus ontwikkeld (Compatibility Support Module) die standaard een klassieke bios-interface te zien gaf, zodat de gebruiker niets van uefi merkt.

Veel huidige systemen werken nog met klasse 2, waarbij de gebruiker in principe zelf kan schakelen tussen uefi en csm-legacy bios. Inmiddels heeft Intel de ondersteuning voor csm beëindigd en ondersteunt het bedrijf alleen zuivere uefi (klasse 3). Dit betekent direct het einde van 32bit-besturingssystemen.

Secure boot

Vanaf uefi-versie 2.2 werd tot slot ook stevig aan de veiligheid van het systeem gesleuteld, met de invoering van secure boot, een functie die tot en met uefi-klasse 3 nog kan worden uitgeschakeld (wat met hogere klassen niet langer het geval zal zijn).

Kort door de bocht beveiligt deze functie het bootproces door te verhinderen dat drivers en besturingssysteem-loaders worden geladen die niet over een geldige digitale handtekening beschikken. Dit wordt gecontroleerd via een lokaal vertrouwd certificaat of door de binaire checksum te vergelijken met een vooraf goedgekeurde lijst. Deze wordt opgeslagen als efi-variabelen in niet-vluchtig geheugen (dat door de uefi-firmware ook wordt gebruikt voor allerlei configuratiedata).

Secure boot wordt inmiddels breed ondersteund, door Windows bijvoorbeeld vanaf Windows 8 en door Ubuntu vanaf versie 12.04.2.

Geschreven door: Toon van Daele op

Category: Nieuws, Algemeen

Tags: standaard