Una parte de la pregunta que no se ha respondido hasta ahora es la diferencia entre los gestores de arranque en los microcontroladores y los sistemas de microprocesadores.
Microcontrolador
La mayoría de los microcontroladores tienen memoria ROM incorporada que contiene su código de programa. Cambiar este código generalmente requiere un dispositivo programador que se conecte a la interfaz de programación del microcontrolador (por ejemplo, ISP en ATMega). Pero estas interfaces de programación a menudo no son muy convenientes de usar, en comparación con otras interfaces, ya que pueden no estar fácilmente disponibles en el contexto dado. Entonces, por ejemplo, aunque casi todas las computadoras cuentan con puertos USB, la interfaz SPI necesaria para ISP es mucho más rara, y otras interfaces como la interfaz PID utilizada en ATXMega solo son compatibles con hardware de programación dedicado.
Entonces, por ejemplo, si desea actualizar el software desde una computadora normal sin ningún hardware externo, puede usar un gestor de arranque que lea desde un tipo diferente de interfaz (por ejemplo, RS232, USB o RS232 a través de USB como en el Arduino) para programar el dispositivo sobre interfaces comunes.
Dicho esto, si no necesita esta funcionalidad, el gestor de arranque es completamente opcional. El microcontrolador aún puede ejecutar su código completamente sin el gestor de arranque.
Microprocesador
En un microprocesador, las cosas son un poco diferentes. Si bien la mayoría de los microprocesadores cuentan con una ROM que es lo suficientemente grande como para un cargador de arranque, esas ROM no son lo suficientemente grandes como para contener un sistema operativo completo. Por lo tanto, el propósito del gestor de arranque es inicializar el hardware, buscar un sistema operativo de arranque, cargarlo y ejecutarlo. Por lo tanto, el gestor de arranque es crítico para cada arranque.
En los sistemas x86 / x64, este gestor de arranque es el BIOS o el UEFI (básicamente una versión más nueva de un BIOS).
A veces incluso puede tener múltiples cargadores de arranque ejecutándose en una cadena. Por ejemplo, si tiene un sistema de arranque dual con Windows y Linux, puede terminar con lo siguiente:
- BIOS / UEFI se inicia y encuentra GRUB instalado. Luego carga GRUB (= Grand Unified Bootloader)
- GRUB encuentra algún tipo de Linux y el cargador de arranque de Windows. El usuario selecciona el cargador de arranque de Windows.
- El gestor de arranque de Windows se inicia y encuentra Windows 7 y Windows 10 instalados. El usuario selecciona Windows 10.
- Windows 10 finalmente arranca.
Entonces, en este caso, había tres piezas de software que pueden considerarse un gestor de arranque. Tanto GRUB como el cargador de arranque de Windows están allí principalmente para brindar al usuario una opción de selección de arranque más conveniente que la que BIOS / UEFI les daría. También permite iniciar múltiples sistemas operativos desde el mismo disco duro o incluso desde la misma partición.
TLDR
Entonces, mientras que en ambos sistemas el gestor de arranque hace cosas similares (ayudando al usuario a elegir qué código arrancar), ambos difieren enormemente en cómo lo logran y qué hacen exactamente.