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.