🛠 Boot sur carte SD, chaîne de démarrage et recouvrement
Objectifs
- Comprendre la chaîne de boot BCM2835 : sans EEPROM ni boot USB, la ROM du VideoCore lit toujours
bootcode.binsur la partition FAT de la carte SD grand format. - Préparer une carte de secours et réparer une partition boot corrompue sans réinstaller.
- Mettre en œuvre une procédure de recouvrement headless.
Matériel
- Model A, carte SD grand format (le logement est du plein format, pas de microSD !), lecteur SD sur le PC.
- Image Raspberry Pi OS legacy 32 bits (Buster ou plus ancien ; les images actuelles ont abandonné l'ARMv6).
balena-etcher,win32diskimagerouddpour l'écriture brute.
Code complet
# Écrire l'image sur la carte SD (PC Linux)
sudo dd if=2021-05-07-raspios-buster-armhf.img of=/dev/sdX bs=4M status=progress conv=fsync
# Recouvrement sans réécriture : monter la partition FAT et réparer config.txt
sudo mount /dev/sdX1 /mnt/boot
mv /mnt/boot/config.txt /mnt/boot/config.txt.bak # config fautive de côté
sync && sudo umount /mnt/boot
# Indicateurs matériels : la LED verte clignote si bootcode.bin est trouvé,
# reste éteinte si la ROM ne lit rien (carte mal écrite / format incompatible)
cat /boot/config.txt | head
Vérification attendue
Après écriture, la carte présente une partition FAT (~64 Mo : bootcode.bin, start.elf, fixup.dat, kernel.img, config.txt) et une partition ext4 racine. Au boot, la LED verte clignote puis le système démarre ; une LED éteinte = ROM sans bootcode.bin.
Erreurs fréquentes
- Écrire l'image sur la partition (sdX1) au lieu du disque entier (sdX) : rien ne boote.
- Utiliser une image récente Raspberry Pi OS : l'ARMv6 du BCM2835 n'est plus supporté, prendre une legacy.
- MicroSD avec adaptateur bas de gamme : la ROM BCM2835 est capricieuse, préférer une vraie carte pleine format.
- Écraser
cmdline.txt(une seule ligne !) lors d'une réparation : root=PARTUUID introuvable, kernel panic.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython