Una parte della domanda a cui non è stata finora data risposta è la differenza tra bootloader su microcontrollori e sistemi a microprocessore.
Microcontroller
La maggior parte dei microcontrollori ha una memoria ROM integrata che contiene il proprio codice di programma. La modifica di questo codice richiede in genere un dispositivo programmatore che si collega all'interfaccia di programmazione del microcontrollore (ad es. ISP su ATMega). Ma queste interfacce di programmazione spesso non sono molto comode da usare, rispetto ad altre interfacce, poiché potrebbero non essere prontamente disponibili in un determinato contesto. Ad esempio, mentre quasi tutti i computer dispongono di porte USB, l'interfaccia SPI necessaria per ISP è molto più rara e altre interfacce come l'interfaccia PID utilizzata su ATXMega sono supportate solo da hardware di programmazione dedicato.
Quindi, ad esempio, se si desidera aggiornare il software da un normale computer senza alcun hardware esterno, è possibile utilizzare un bootloader che legge da un diverso tipo di interfaccia (ad esempio RS232, USB o RS232 su USB come su Arduino) per programmare il dispositivo su interfacce comuni.
Detto questo, se non hai bisogno di questa funzionalità il bootloader è completamente opzionale. Il microcontrollore può ancora eseguire il suo codice completamente senza il bootloader.
microprocessore
Su un microprocessore le cose sono leggermente diverse. Mentre la maggior parte dei microprocessori presenta una ROM abbastanza grande per un bootloader, quelle ROM non sono abbastanza grandi da contenere un sistema operativo completo. Quindi lo scopo del bootloader è di inizializzare l'hardware, cercare un sistema operativo avviabile, caricarlo ed eseguirlo. Quindi il bootloader è fondamentale per ogni singolo avvio.
Sui sistemi x86 / x64 questo bootloader è il BIOS o UEFI (sostanzialmente una versione più recente di un BIOS).
A volte potresti persino avere più bootloader in esecuzione in una catena. Ad esempio se hai un sistema a doppio avvio con Windows e Linux potresti finire con il seguente:
- BIOS / UEFI si avvia e trova GRUB installato. Quindi carica GRUB (= Grand Unified Bootloader)
- GRUB trova una specie di Linux e il Bootloader di Windows. L'utente seleziona il Bootloader di Windows.
- Il bootloader di Windows si avvia e trova Windows 7 e Windows 10 installati. L'utente seleziona Windows 10.
- Windows 10 infine si avvia.
Quindi in questo caso c'erano tre software che possono essere considerati un bootloader. Sia GRUB che Windows Bootloader sono per lo più lì per offrire all'utente un'opzione di selezione di avvio più comoda di quella che il BIOS / UEFI darebbe loro. Consente inoltre l'avvio di più sistemi operativi dallo stesso disco rigido o anche dalla stessa partizione.
TLDR
Quindi, mentre in entrambi i sistemi il bootloader fa cose simili (aiutando l'utente a scegliere quale codice avviare) entrambi differiscono notevolmente per come lo realizzano e cosa fanno esattamente.