In questa raccolta di appunti sistemati per l’occasione parlerò del processo di avvio di un sistema generico e dei vari boot loader disponibili nel mondo GNU/Linux. In particolare, in questa prima parte vedremo il processo di boot.
SEMPLICEMENTE IL PROCESSO DI BOOT
Quando si avvia un elaboratore viene eseguito il codice del BIOS contenuto in una memoria non volatile (normalmente una EEPROM). Inizialmente viene effettuato un POST (Power-on self test) per un check dell’hardware, poi viene individuato il device di boot e caricato il primo settore dal MBR (master boot record) che contiene la tabella delle partizioni e il codice per avviare la prima parte del bootloader. Tale codice è contenuto in meno di 512 byte.
Per quanto riguarda il bootloader Grub, e il suo processo di boot, si possono individuare due fasi o stadi. Il primo stadio o first stage boot loader ha l’incarico di avviare Grub ed è incorporato nel master boot record o nel boot sector di una partizione. Da questa prima parte (primo stadio) del bootloader è caricato lo stadio due che avvierà il resto del sistema operativo. Lo stadio due contiene il “cuore” di Grub ossia il codice che permette di caricare l’immagine del Kernel, decomprimerla e inizializzarla. Successivamente, il secondo stadio effettua un check dell’hardware, il mount del dispositivo di root e carica i moduli necessari del kernel. Quindi, viene avviato il primo processo init e di consegnenza tutto il sistema operativo.
LO STAGE UNO DEL BOOTLOADER
Il primo stadio del boot loader risiede nel MBR (master boot record) ed occupa circa 512 byte; Esso contiene i programmi e una tabella delle partizioni. Nei primi 446 bytes è presente il codice del primo stadio del bootloader: la parte di codice eseguibile e la parte relativa ai messaggi d’errore. Gli altri 64 bytes sono composti dalla tabella delle partizioni (16 bytes per ognuna delle quattro partizioni possibili). Il master boot sector termina con 2 bytes che sono definiti il numero magico (magic number). Questo numero serve a “validare” il master boot record. Il lavoro del primo stadio del boot loader è trovare e caricare il secondo stadio. Quando esso trova una partizione attiva, si accerta che le altre non lo siano e se ciò si verifica viene caricato il boot record della partizione attiva dal dispositivo di boot alla RAM.
IL SECONDO STADIO DEL BOOTLOADER
Questo stadio si chiama “kernel loader” proprio perchè ha questa funzione. Approfondendo l’analisi, lo stadio due risulta composto da due parti: lo stadio 1.5 e lo stadio due. In definitiva lo stadio 1.5 serve a “trovare” lo stadio due. In questo caso lo stadio due (o questo tipo di immagine) serve ad avviare il Kernel e poi il resto del sistema operativo. In altri casi lo stadio due può può essere un immagine di boot per il CD-ROM o per l’avvio da rete.
LA SEQUENZA DEFINITIVA
Evidentemente non sto parlando di DNA, ma della sequenza definitiva del caricamento del bootloader che risulta composta dai seguenti stadi:
Stage1 -> Stage1.5 -> Stage2
In definitiva, il primo stadio e il secondo stadio (aggiunto dello stadio 1.5), insieme, rappresentano il bootloader, e in tal senso nel mondo GNU/Linux i più importanti bootloader sono: il LILO (Linux Loader), il Grand Unified Bootloader (GRUB), il GRUB 2 ed ELILO. Questi sono i rappresentanti ufficiali, ma ne esitono altri di minore importanza e poco utilizzati.
CONCLUSIONI
Purtroppo, siamo giunti al termine della prima parte di appunti, e nella prossima inizierò a parlare dei bootloader.
Se l’articolo vi è piaciuto è volete sostenere il sito Megalinux inviate Bitcoin all’indirizzo:
3EJZiSmqRkoZ48ae2pYbKupMYQqoQvxdxe