🛠 Amorçage microSD, pannes de boot et procédure de recouvrement
Objectifs
Comprendre la chaîne d'amorçage très particulière du Model B+ — le ROM du BCM2835 ne sait démarrer que sur la microSD, pas de mémoire EEPROM ni d'amorçage USB — et savoir remettre en service une carte devenue inbootable sans réinstaller : édition de config.txt, shell de secours, vérification des systèmes de fichiers.
Matériel
- Raspberry Pi Model B+ (BCM2835) et sa microSD suspecte
- Un PC avec adaptateur microSD, Raspberry Pi Imager (ou Etcher/dd)
- Image Raspberry Pi OS legacy 32 bits (Buster ou antérieure ; l'ARMv6 n'est plus supporté depuis Bullseye)
- Écran HDMI + clavier utiles pour observer les messages de boot
Code complet
# 1) Graver proprement une image (sur le PC Linux)
sudo dd if=2021-05-07-raspios-buster-armhf.img of=/dev/sdX bs=4M status=progress conv=fsync
# 2) Sur la carte : la partition 1 est la FAT « boot » lue par le ROM
lsblk -o NAME,SIZE,FSTYPE,MOUNTPOINT /dev/sdX
# bootcode.bin, kernel.img, config.txt, cmdline.txt doivent être à la racine
# 3) Shell de secours : sur le PC, ajouter init=/bin/sh à la fin de cmdline.txt
# (enlever « init=... » existant), booter, changer le mot de passe, retirer la ligne
sudo passwd root
# 4) Réparer une partition root encrassée après une coupure brutale
sudo touch /forcefsck && sudo reboot
# 5) Carte muette : tester une autre microSD, vérifier l'alimentation 5 V, et
# regarder la LED d'alimentation (rouge) — le B+ n'a pas de LED d'activité
# séparée fiable selon les révisions.
Vérification attendue
Avec une carte saine, la LED rouge s'allume et l'écran affiche la séquence de boot puis l'invite de login. Le shell de secours (init=/bin/sh) donne un root direct : mount -o remount,rw / puis passwd permettent de récupérer l'accès. Après suppression de la ligne et reboot, le système revient en normal.
Erreurs fréquentes
- Tenter un boot USB ou réseau : impossible sur BCM2835, aucun EEPROM ni mode de récupération comme sur Pi 3/4/5 — seule la microSD amorce.
- Image récente (Bullseye+) gravée par erreur : le ARMv6 n'est plus supporté, le boot échoue silencieusement ; prendre une image legacy.
- Modifier cmdline.txt en gardant deux paramètrès init= : le noyau ignore ou plante, ne laisser qu'un seul init.
- Carte SD usée : les corruption répétées après fsck signifient « poubelle » ; les microSD ont une durée de vie finie, en changer avant d'accuser le système.
- LED rouge qui clignote ou s'éteint : sous-tension (polyfuse), changer d'alimentation avant tout diagnostic logiciel.
Autres tutoriels pour cette carte
- Allumer une LED depuis la GPIO 17 avec libgpiod
- Lire un bouton et afficher les appuis dans la console
- Premier script Python : faire clignoter la LED
- Variation d'intensité d'une LED avec le PWM matériel (GPIO18)
- Interroger un capteur I2C (BME280) sur le bus du 40 broches
- Mettre le B+ en réseau par Ethernet et piloter en SSH
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython