¿Cómo arranca Raspberry Pi?

57

Tengo una mini computadora de frambuesa y me pregunto cómo funciona todo el proceso de arranque. Puedo compilar mi propio kernel e init ramdisk con mis propios scripts y construir mi propio sistema linux mínimo en PC, pero para eso necesito usar algún gestor de arranque. Raspberry no parece admitir cargadores de arranque en absoluto.

Parece que de alguna manera arranca usando su GPU que lee alguna partición en la tarjeta SD (probablemente aquella con bandera de arranque) que necesita formatearse en FAT32, luego lee algunos archivos desde allí, que son proporcionados, por ejemplo, por raspbian.

Pero, ¿cómo iniciaría mi propio núcleo, con mis propias personalizaciones que compilé yo mismo? ¿Dónde debo copiar la imagen del núcleo / initrd (disco ram) para que la frambuesa lo encuentre y arranque desde él? Básicamente estoy buscando documentación técnica muy detallada que describa el proceso de arranque en frambuesa o simplemente alguna explicación de esto.

Petr
fuente
1
posible duplicado de ¿Qué sucede durante el proceso de arranque?
asalamon74

Respuestas:

59

De esta publicación en el foro de Raspberry Pi [Editado para reflejar loader.bincomo un anacronismo] :

  1. Cuando la Raspberry Pi se enciende por primera vez, el núcleo ARM está apagado y el núcleo de la GPU está encendido. En este punto, la SDRAM está deshabilitada.
  2. La GPU comienza a ejecutar el gestor de arranque de la primera etapa, que se almacena en la ROM en el SoC. El gestor de arranque de la primera etapa lee la tarjeta SD, carga el gestor de arranque de la segunda etapa ( bootcode.bin) en el caché L2 y lo ejecuta.
  3. bootcode.binhabilita SDRAM y lee el cargador de arranque de la tercera etapa (loader.bin) de la tarjeta SD en la RAM, y lo ejecuta. [Las versiones más recientes no usan un gestor de arranque de tercera etapa. ]
  4. [Si corresponde] loader.binlee el firmware de la GPU ( start.elf).
  5. start.elflee config.txt, cmdline.txtykernel.img

loader.binno hace mucho Puede manejar .elfarchivos, por lo que es necesario cargarlo start.elfen la parte superior de la memoria (ARM usa SDRAM de la dirección cero). Hay un plan para agregar soporte de carga de elfos bootcode.bin, lo que haría loader.bininnecesario, pero es una prioridad baja (supongo que podría ahorrarte 100 ms en el arranque). [Este cambio ha tenido lugar desde entonces. ]

Aquí hay algunos recursos que podrían ser útiles:

syb0rg
fuente
2
¿Es ese contenido de estos archivos bin todo software propietario?
Petr
3
@Petr Aquí está el Github para el firmware de Raspberry Pi, lo editaré en mi respuesta.
syb0rg
1
En las preguntas frecuentes de Raspberry Pi , dice "Tienes que arrancar desde SD pero un USB HD puede" hacerse cargo "después del arranque inicial. No puedes arrancar sin una tarjeta SD".
syb0rg
1
¿Es esa partición, que se lee primero, alguna partición con bandera B o debe ser la primera partición? ¿Qué pasaría si lo hiciera demasiado grande y quisiera crear otro en la tarjeta SD que sería más pequeño
Petr
1
@Petr ¡Deberías hacer eso como otra pregunta!
syb0rg