Mai 162015
 

De façon contre-intuitive, le CPU ARM1176JZF-S 700 MHz du SoC (system on a chip) Broadcom BCM2835 de la Raspberry Pi ne démarre pas immédiatement à l’allumage.
Le processeur est en réalité tenu à RESET.

C’est le GPU (VideoCore IV) contennu dans ce même SoC qui va se charger de la sequence de boot.

Le « first stage bootloader » est donc chargé depuis une ROM du SoC.
A ma connaissance cette ROM n’est pas « flashable » ou alors la procédure qui le permet n’est pas publiques.
Ce « first stage bootloader » est capable de charger et executer le « second stage bootloader » qui doit impérativement être le fichier nommé « bootcode.bin » situé sur la permière partition de la SD-Card, (ou de la eMMC embarquée sur le computemodule) laquelle doit être un système de fichier FAT32 ou FAT16.

Le « second stage bootloader » (bootcode.bin) est toujours executé par le GPU VideoCore. La seule différence avec le first-stage est qu’on est plus sur quelque chose de complètement figé (rom). Il charge le « third stage bootloader » « start.elf. »

C’est là que ça commence a devenir intéressant.
Le « third stage bootloader » (start.elf) commence par lire le fichier config.txt.
Ce fichier contient les paramètres de fonfiguration pour le GPU ( modes HDMI, mapping mémoire, load addresses, device tree, uart/console baud rates etc).

Ensuite, le « third stage bootloader » va charger « kernel.img » dans la mémoire du processeur ARM et lui passer en paramètres le contennu de cmdline.txt.

C’est alors et seulement alors que le RESET du CPU est relaché.

A ce moment le kernel doit démarrer…

A noter que le système ne permet pas de charger des noyaux avec initialramdisk.
Tous les elements nécessaires au boot (et en particulier au montage du filesystem) doivent être compilés « en dur » dans le noyau.

Note : Il existe plusieurs déclinaisons du « third stage bootloader » selon la configuration et en particulier selon le split mémoire. (par exemple la version « cut-down » si on a configuré seulement 16Mo pour le GPU.)

liste des fichier de /boot

bcm2708-rpi-b.dtb Hardware definition file used by bootloader (Device Tree Binary)
bcm2708-rpi-b-plus.dtb Hardware definition file used by bootloader (Device Tree Binary)
bcm2709-rpi-2-b.dtb Hardware definition file used by bootloader (Device Tree Binary)
bootcode.bin Seccond stage bootloader
cmdline.txt Arguments passed to the kernel
config.txt Configuration of third stage bootloader
COPYING.linux Legal / no technical use
fixup_cd.dat bugfixes used by bootloader (need more info)
fixup.dat bugfixes used by bootloader (need more info)
fixup_db.dat bugfixes used by bootloader (need more info)
fixup_x.dat bugfixes used by bootloader (need more info)
issue.txt Legal / no technical use ( to be confirmed)
kernel7.img Linux image for ARM7 (raspiB+)
kernel.img Linux image for ARM6 (normal)
LICENCE.broadcom Legal / no technical use
overlays subdir with Hardware definition files (Device Tree Binary)
start_cd.elf cut-down version of third stage bootloader (for low memory configs)
start_db.elf special version of third stage bootloader (need more info)
start.elf Third stage bootloader
start_x.elf special version of third stage bootloader (need more info)

Sorry, the comment form is closed at this time.