Raspberry Pi: ¿tiene BIOS?

Raspberry Pi BIOS

Algunos usuarios se preguntan si la Raspberry Pi tiene BIOS o UEFI, como otros equipos, ya que UEFI, como sabes, también está soportado en equipos basados en Arm, como es el caso de esta SBC tan popular y barata. Pero lo cierto es que los chicos de la frambuesa han optado por otra solución alternativa.

Aquí aprenderás cuál es esa solución y los motivos por los que no emplea este firmware, además de mostrarte cómo se realizan algunas configuraciones en la Raspberry Pi cuando no hay Setup Menu como en los ordenadores…

¿Por qué la Raspberry Pi no usa BIOS/UEFI?

Raspberry Pi 4

Como sabes, el BIOS o UEFI es un firmware que está presente en multitud de ordenadores, tanto en los de sobremesa, portátiles, AIO, servidores, estaciones de trabajo, etc. Sin embargo, no lo está en la Raspberry Pi, pese a ser una SBC (Single Board Computer), a diferencia de otras SBC x86 que sí que usan este firmware para el proceso de arranque y comprobación del sistema. Y no es porque la Raspberry Pi esté basada en ARM, ya que muchos equipos ARM también cuentan con BIOS/UEFI.

Por otro lado, hay que decir que este firmware está diseñado para que el arranque sea más fácil desde el medio de almacenamiento donde se encuentre el sistema operativo, además de para poder controlar otras muchas configuraciones. Aquí es donde nos va dando pistas de por qué la Raspberry Pi no usa BIOS. Por un lado porque solo puede arrancar dispositivos de un mismo medio, como son las tarjetas SD, y no de otras formas. Y por otro lado porque la cantidad de periféricos y funciones en una Raspberry Pi están más limitadas.

No obstante, esto no es del todo un motivo para no usar BIOS o UEFI. De hecho, si analizamos bien, el SoC ARM de la Raspberry Pi usa su propio firmware interno para arrancar la CPU en un estado apropiado y el resto del sistema sin necesidad de un chip BIOS separado. Pero.. ¿entonces por qué no se puede acceder al BIOS Setup o menú del BIOS? Por un lado porque ese firmware es muy limitado, y no tan complejo como el BIOS/UEFI, por lo que carecería de sentido un menú para configurar parámetros, y por otro por lo comentado anteriormente, que solo puede arrancar desde un medio de almacenamiento prdeterminado, como es la tarjeta SD.

Los desarrolladores de la Raspberry Pi han preferido por este motivo usar este firmware básico para la inicialización y el arranque desde una tarjeta SD que usar un chip ROM con un firmware más complejo instalado en la PCB. Y es que, si te fijas, los dispositivos móviles tampoco tienen BIOS/UEFI, ya que solo pueden arrancar Android (u otro sistema operativo), desde la memoria interna.

De este modo, por un lado se ahorra ese chip adicional en la placa, y por otro lado también se elimina la necesidad de incluir una memoria flash para almacenamiento que también encarecería la Raspberry Pi. La tarjeta SD la tienes que comprar a parte.

No obstante, hay que decir que en la Raspberry Pi 3 se agregó un soporte experimental para arrancar desde un medio USB que se debe habilitar explícitamente y no se puede deshabilitar. Esto está incluido en el firmware integrado del SoC de la nueva versión, pero esto supuso algo más de complicación, por lo cual es probable que por eso decidieran en un inicio comenzar por lo fácil y usar el arranque solo desde tarjetas de memoria SD.

¿Qué usaba la Raspberry Pi en su lugar?

Alimentación Rasbperry Pi 4

La Raspberry Pi no tiene BIOS o UEFI como se entiende en el mundo del PC, por ejemplo, pero sí que tiene un firmware de código cerrado en el SoC como he comentado anteriormente. Este chip está diseñado por la compañía Broadcom, que suministra los BCM a estas placas de la Raspberry Pi Foundation.

En el SoC (System on a Chip) se integra una CPU ARM Cortex-A Series, una GPU VideoCore, un DSP para el tratamiento de señal digital, memoria SDRAM compartida por la CPU y GPU, y controladores como el de USB, etc. Además, también incluye una memoria ROM en el cual se integra el firmware del que  hablamos y que es necesario para el arranque.

Procedimiento de arranque

Los pasos que sigue este firmware son:

  1. Este firmware se encarga de iniciar el gestor de arranque del sistema operativo que se encuentre en la tarjeta SD. Como sabrás el gestor de arranque o bootloader monta la partición FAT32 de la tarjeta de memoria SD y pasa a la segunda etapa de inicio, que está programada en el SoC y no puede ser modificada.
  2. En la segunda etapa entra en escena un archivo conocido como bootcode.bin, en el cual se prepara e inicia el firmware de la GPU. Este archivos olo puede estar alojado en la tarjeta SD, por eso no se puede modificar la prioridad de arranque como en un BIOS/UEFI convencional de un PC, y solo arrancará desde allí. No obstante, como he dicho, en la Pi 3 se agregó de forma experimental también la posibilidad de arrancar desde el USB.
  3. Después llega una tercera etapa en la que se hace uso del archivo start.elf, que pone en marcha la CPU y un fichero llamado fixup.dat, que se emplea para crear la partición necesaria en la SDRAM para que pueda comenzar a ser usada por la CPU y la GPU.
  4. Finalmente se ejecuta el código de usuario, que normalmente son los binarios ejecutables o imágenes del kernel Linux, como kernel.img, o de otros sistemas operativos soportados por la Raspberry Pi, y así es como arranca el sistema operativo para poderlo usar…

Como has visto, es un proceso simple, pero algo extraño si lo comparamos con un PC u otros ordenadores. Y es que, en el caso de la Raspberry Pi, en vez de iniciar la CPU, como en otros casos, se inicia primero la GPU. De hecho, esta GPU de Broadcomo será la encargada de ejecutar una especie de sistema operativo embebido en el SoC que es muy simple, pero necesario para funcionar. Se conoce como VCOS (Video Core Operating System), y éste comunicará con Linux. Es muy raro esto, pero lo cierto es que la GPU de la Pi no solo se encarga de los gráficos y de iniciar, también se encarga de controlar el reloj del sistema y el audio.

En principio, dicho esto, parece que poco podemos hacer para modificar la configuración de arranque, pero lo cierto es que no es del todo así. Y es que existe un archivo denominado config.txt que está localizado en el directorio /boot/ del sistema y si se abre con algún editor de texto, se puede modificar su contenido fácilmente para alterar el arranque y configurarlo con ciertos parámetros.

Este archivo config.txt será leído por la GPU tras iniciar el núcleo ARM, y en él se encuentran las instrucciones para que el SoC sepa qué debe hacer durante el arranque del sistema. Por ejemplo, podemos modificar en él la memoria dedicada, el refresco de la memoria, deshabilitar el acceso a la cache L2, alterar la configuración CMA, habilitar o deshabilitar el LED de la cámara, cambiar opciones del modo de vídeo, codecs, algunas opciones de arranque, realizar overclocking, etc.

Este archivo tiene una sintaxis bastante peculiar, por lo que se debe respetar para no producir problemas en el arranque. Y si quieres más información al respecto, puedes leer la wiki que te dejo en este enlace.

Cambiar la prioridad del arranque en la Raspberry Pi

NOOBS config.txt

Cuando cambias el orden o la prioridad de arranque en un PC es todo muy sencillo, tan solo tienes que entrar en el BIOS/UEFI, y en la pestaña Boot puedes encontrar los parámetros que puedes variar para arrancar desde el disco duro, un medio óptico, USB, en red, etc. En cambio, en la Raspberry Pi no es tan fácil. De forma predeterminada arrancará siempre el SO desde la tarjeta de memoria SD insertada en la SBC. De hecho, incluso tras la versión 3, si se inserta una tarjeta SD y una memoria USB, el sistema seguirá arrancando primero desde la SD. Si se retira la SD y se deja solo el USB, entonces lo hará a través del USB.

Pero se puede alterar este orden. Para eso debes iniciar Raspbian, por ejemplo, y realizar lo siguiente:

  • Abre la configuración de la Raspberry Pi con el comando:
sudo raspi-config
  • Ve a la sección «Opciones avanzadas». (aviso, el menú está en inglés)
  • Después, dentro de esta sección, presiona INTRO en la opción «Orden de Arranque».
  • Ahora debes ver tres opciones diferentes entre las que elegir:
    • Arranque de la tarjeta SD: de manera predeterminada, esta opción ya está habilitada en su dispositivo Raspberry Pi y si insertas una tarjeta SD y un USB simultáneamente, el sistema usará la tarjeta SD como una opción de arranque predeterminada a menos que la elimine.
    • Arranque USB: si deseas usar USB como dispositivo principal para arrancar el sistema, puedes seleccionar esta opción, que funciona cuando tienes un dispositivo USB insertado en la Raspberry Pi. En otro caso, no debes insertar una tarjeta SD para iniciar el sistema.
    • Arranque de red: esta opción de arranque es útil si tu tarjeta SD Raspberry Pi no funciona por algún motivo o si hay algún problema con su sistema operativo. En ese caso, hará uso de la herramienta Imager para reinstalar el sistema en la tarjeta SD.

Una vez termines, puedes reiniciar la Raspberry Pi para aplicar los cambios…

Diagnosticar problemas de la Raspberry Pi (P.O.S.T.)

Por último, sabrás que en un BIOS/UEFI existe un paso llamado P.O.S.T. que se realiza antes del arranque del sistema operativo y que comprobará el estado de los diferentes componentes. En caso de estar todo OK, dará paso al arranque del SO. Pero si detecta algún problema, se detiene y muestra un mensaje de error en pantalla o emite algún código beep sonoro para identificar cuál es el problema.

Esto en la Raspberry Pi tampoco existe. Sin embargo, el firmware del SoC tiene un método para tratar de indicar problemas que puedan darse para un fácil diagnóstico. Y eso es a través de su LED de encendido. Por ejemplo, para la Raspberry Pi 4, los códigos de luz que emite el LED para indicar problemas son:

Destellos largos Destellos cortos Status
0 3 Fallo general durante el arranque
0 4 No se ha encontrado start*.elf
0 7 No se ha encontrado la imagen del kernel
0 8 Fallo en la SDRAM
0 9 SDRAM insuficiente
0 10 En estado HALT
2 1 La partición no es FAT (no compatible)
2 2 Fallo al leer la partición
2 3 Partición extendida no FAT
2 4 Hash o firma no coincide
3 1 Error SPI EEPROM
3 2 SPI EEPROM protegido contra escritura
3 3 Error I2C
4 4 Tipo de placa no soportada
4 5 Error de firmware fatal
4 6 Fallo de encendido tipo A
4 7 Fallo de encendido tipo B

Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.