Magazine Informatica

ArchLinux: Guida a Unified Extensible Firmware Interface (Italiano), prima parte.

Creato il 14 marzo 2014 da Linuxlandia

L'Unified Extensible Firmware Interface (UEFI in breve) è un nuovo firmware inizialmente progettato da Intel (con il nome EFI) per i sistemi basati su processori Itanium. Esso introduce un nuovo metodo di avvio del SO che si distingue dal tradizionale "codice di avvio MBR" utilizzato dal BIOS. La versione di EFI 1.x fu presentata da Intel e successivamente un gruppo di aziende chiamato "the UEFI forum" si assunse il ruolo di svilupparlo e, per questo, a partire dalla versione 2.0 venne chiamato Unified EFI. Dal 23 Maggio 2012, la versione più recente è la 2.3.1


Avviare un SO usando il BIOS.

Il BIOS (Basic Input-Output System) è il primo programma che viene eseguito all'accensione del PC. Quando tutto l'hardware è stato avviato e le operazioni POST sono state completate, il BIOS esegue il primo codice di avvio presente sulla prima periferica specificata nella lista di avvio (booting list).

Se il primo elemento della lista è un lettore CD/DVD, viene eseguita l'estensione El-Torito(codice di avvio) presente sul CD. Se il primo elemento è un HDD, il BIOS esegue i primi 440 byte cioè il codice di avvio MBR. Il codice di avvio effettua un chainload oppure il bootstrap di un bootloader più complesso che poi avvia il SO.

Il BIOS non sa come leggere la tabella delle partizioni o un filesystem, ma si limita ad inizializzare l'hardware ed eseguire il codice d'avvio.

archlinux uefi

Avvio multiplo con BIOS.

Dato che si può ottenere poco da un programma deve occupare solo i primi 440 bytes disponibili, per l'avvio multiplo usando il BIOS è necessario un bootloader che gestisca l'avvio multiplo(si intende l'avvio di più di un sistema operativo, non l'avvio di un Kernel nel formato Multiboot). Per questo motivo il BIOS si limita ad avviare un bootloader come GRUB, Syslinux oppure LILO il quale in seguito si occupa di caricare il sistema operativo attraverso un chainload(caricamento di un altro bootloader) oppure direttamente caricando il kernel.

Avviare un SO usando UEFI.

Il firmware UEFI non avvia il sistema con il metodo sopra menzionato (l'unico supportato dal BIOS), difatti UEFI ha la capacità di leggere la tavola delle partizioni e quella di riconoscere i singoli filesystem.

I firmware UEFI comunemente utilizzati supportano entrambi i sistemi di partizionamento MBR e GPT. L'EFI Apple supporta anche la mappa di partizionamento Apple. La maggior parte dei firmware UEFI supportano i filesystem FAT12 (floppy disks), FAT16 e FAT32 negli HHD inoltre ISO9660(e UDF) nei CD/DVD. Il firmware EFI nei sistemi Apple supporta in aggiunta i filesystem HFS/HFS+.

UEFI non lancia nessun codice dall'MBR sia che il codice esista o meno. Utilizza invece una speciale partizione chiamata "EFI SYSTEM PARTITION" che contiene i file che verranno avviati dal firmware. Ogni produttore può archiviare i propri file nella cartella <EFI SYSTEM PARTITION>/EFI/<PRODUTTORE>/ e usare il firmware (oppure la propria shell UEFI) per lanciare il programma di avvio. La partizione di sistema EFI ha normalmente come filesystem FAT32.

In ambiente UEFI, tutti i programmi che siano loader per un Sistema Operativo o altri strumenti (come programmi per il test della memoria) o strumenti di recovery al di fuori del sistema operativo, dovrebbero essere applicazioni UEFI corrispondenti all'architettura del firmware EFI. Molti dei firmware UEFI sul mercato, inclusi i recenti Mac di Apple utilizzano un firmware UEFI x86_64. Solo alcuni vecchi Mac utilizzano un firmware EFI i386 mentre i sistemi UEFI non Apple sono risaputi utilizzare firmware EFI i386.


Nota: Alcune vecchie schede Server Intel sono note operare con un firmware Intel EFI 1.10, e richiedono applicazioni EFI i386.

Un firmware EFI x86_64 non include il supporto per il lancio di applicazioni EFI a 32-bit, diversamente dai sistemi Linux o Windows 64-bit che includono questo supporto. Comunque il bootloader dovrà essere compilato per la corretta architettura.

Avvio multiplo con UEFI

Dato che ogni SO o produttore può mantenere i propri file nella partizione del sistema EFI(EFI SYSTEM PARTITION) senza modificarne altri, il multiboot mediante UEFI consiste nel lanciare una differente applicazione UEFI corrispondente al bootloader di un determinato sistema operativo. Questo rende non necessari i meccanismi di chainload dei bootloader per avviare altri sistemi operativi.

archlinux uefi2
Linux Windows x86_64 UEFI-GPT Multiboot.

Le versioni Windows Vista (SP1+), Windows 7 Professional e Windows 8 x86_64 supportano nativamente il boot da un firmware UEFI. Ma per questo è necessario un partizionamento di tipo GPT sul disco utilizzato per il boot con UEFI. Le versioni 32-bit di Windows supportano solamente il boot di tipo BIOS-MBR. Seguire le istruzioni fornite nel link del forum nella sezione altre risorse, per informazioni su come procedere. Consultare http://support.microsoft.com/default.aspx?scid=kb;EN-US;2581408 per maggiori informazioni.

Questa limitazione non esiste per il Kernel Linux ma piuttosto per il bootloader utilizzato. Per il bene dell'avvio di Windows, il bootloader Linux dovrebbe essere installato in modalità UEFI-GPT se si avviano entrambi dal solito disco.


Processo di boot con UEFI

   Accensione del sistema - Power On Self Test, o processo POST.
   Viene caricato il firmware UEFI.
   Il firmware legge il suo Boot Manager per determinare quale applicazione UEFI avviare e da dove avviare (ad esempio da quale disco e partizione).
   Il firmware avvia l'applicazione UEFI dalla partizione UEFISYS formattata FAT32 come definito nella voce di avvio del boot manager del firmware.
   L'applicazione UEFI può avviare un'altra applicazione (nel caso di UEFI Shell o un boot manager come rEFInd) oppure il kernel e l'initramfs (nel caso di un bootloader come GRUB) a seconda di come è stata configurata l'applicazione UEFI.

Identificare l'architettura del firmware UEFI

Se si possiede un sistema UEFI non mac, allora si ha un firmware UEFI 2.x x86_64 (detto anche 64-bit).

Alcuni dei più noti firmware UEFI 2.x x86_64 sono Phoenix SecureCore Tiano, AMI Aptio, Insyde H2O.

Alcuni dei più noti sistemi che utilizzano questi firmware sono Asus EZ Mode BIOS (schede madri con Sandy Bridge P67 e H67 ), MSI ClickBIOS, HP EliteBooks, Sony Vaio Z series, alcune schede madri Desktop e Server di Intel.

I Mac prodotti prima del 2008 per lo più hanno firmware i386-efi mentre quelli prodotti dopo hanno firmware x86_64-efi. Tutti i Mac capaci di eseguire il kernel di Mac OS X Snow Leopard 64-bit hanno un firmware x86_64 EFI 1.x.

Per individuare l'architettura del firmware efi in un Mac, avviare Mac OS X e digitare il seguente comando:

ioreg -l -p IODeviceTree | grep firmware-abi

Se la risposta del comando è EFI32 allora il firmware sarà i386 EFI 1.x. Se risponde EFI64 allora il firmware sarà x86_64 EFI 1.x. I Mac non hanno un firmware UEFI 2.x perché l'implementazione di Aplle del firmware EFI non soddisfa pienamente le specifiche UEFI.


Supporto del Kernel Linux per UEFI.
Configurazioni del Kernel Linux per UEFI

Le configurazioni del Kernel Linux richieste per utilizzare UEFI sono:

CONFIG_EFI=y
CONFIG_EFI_STUB=y
CONFIG_RELOCATABLE=y
CONFIG_FB_EFI=y
CONFIG_FRAMEBUFFER_CONSOLE=y

Supporto per le variabili/servizi di runtime - il modulo del kernel 'efivars'. Questa opzione è importante perché richiesta per accedere e variare le variabili di Runtime UEFI utilizzando strumenti come efibootmgr.

CONFIG_EFI_VARS=m

Nota: In questa opzione è compilato come modulo come nei kernel di Arch reperibili in core/testing.
Nota: Per permettere a Linux di accedere ai servizi di runtime UEFI, l'architettura del firmware UEFI e quella del Kernel Linux devono coincidere. Non dipende dal bootloader utilizzato.
Nota: Se l'architettura del firmware UEFI e quella del Kernel Linux sono diverse, utilizzare il parametro "noefi" nella linea kernel per evitare kernel panic ed avviare correttamente. L'opzione "noefi" comunica al kernel di non accedere ai servizi di runtime UEFI.

Opzione di configurazione per la tavola delle partizioni GPT(GUID Partition Table) - obbligatoria per il supporto ad UEFI:

CONFIG_EFI_PARTITION=y

Nota: Tutte le opzioni sopra sono richieste per avviare Linux tramite UEFI, e sono abilitate nei kernel presenti nei repository ufficiali di ArchLinux.

Informazioni ottenute da http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=blob_plain;f=Documentation/x86/x86_64/uefi.txt;hb=HEAD .

Archlinux_UEFI_GRUB2_x64_Kernel_Panic

Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:

ArchLinux: Guida a Unified Extensible Firmware Interface (Italiano), prima parte.


Potrebbero interessarti anche :

Ritornare alla prima pagina di Logo Paperblog

Possono interessarti anche questi articoli :