X96 Max+ briquée : diagnostic et récupération par la console série

· 4 min de lecture

Une box qui ne s’allume plus, sans LED, sans image, sans réseau, ce n’est pas forcément une box morte. Voici l’histoire d’une X96 Max+ (Amlogic S905X3, 4 Go) qui bootait Android, que j’ai briquée en voulant installer Armbian, et que j’ai récupérée.

Le point de départ

La box tournait sous Android. L’objectif : un serveur Armbian avec le système sur un SSD USB 3.0. J’ai suivi la voie habituelle avec l’installeur d’ophub (armbian-install).

Ce qui a cassé

L’installeur, lancé avec son option par défaut (-m no), a écrit un bootloader nommé hk1box-bootloader.img dans la zone utilisateur de l’eMMC. C’est le bootloader d’une autre box. Sur cette carte, son initialisation de la mémoire plante : le premier étage de démarrage (BL2) repart en boucle. Sur la console série, on voit défiler la même séquence : lecture de l’eMMC, bl2_stage_init, identifiant matériel, puis reset.

Pourquoi elle semblait morte

Tout ce qu’on regarde d’habitude était muet :

  • aucune LED, parce que la façade est un afficheur piloté par logiciel ;
  • aucune image HDMI, parce que le plantage arrive avant u-boot ;
  • aucun réseau ;
  • aucun mode USB de secours : le ROM lit d’abord l’eMMC, la trouve valide au contrôle (CHK:0) et ne bascule donc jamais vers l’USB.

La preuve qu’elle vivait est venue de la console série (UART, niveau 3,3 V, 115200 8N1) : les messages du ROM défilaient en boucle. Un autre indice : une lueur rouge au port optique, signe que la carte était alimentée.

La clé : faire échouer l’eMMC

Le ROM est « eMMC d’abord » : une carte SD de secours ne sert à rien tant que l’eMMC répond. Il faut donc faire échouer l’eMMC au moment du démarrage. J’ai relié à la masse, à la mise sous tension, une ligne de signal de l’eMMC (CLK, CMD ou DAT0), sur une des petites pastilles rondes au ras du boîtier BGA. Les gros composants alentour ne servent à rien.

Attention. C’est une manipulation de dernier recours, qui peut endommager la carte. Je ne détaille pas les pastilles de ce modèle. Utilisez une alimentation secteur : l’USB seul provoque des coupures de tension (brown-out) qui faussent tout.

Sur l’UART, le message change : EMMC:1000, puis SD:0. L’eMMC est vue comme défaillante, et le ROM tombe sur la carte SD. La SD de secours contient le bootloader d’origine écrit à l’offset 0x200.

La réparation définitive

Une fois Armbian démarré, il faut remplacer le mauvais bootloader par le bon, celui de la version mainline pour cette carte. Il est fourni avec le système sous /usr/lib/u-boot/x96maxplus-u-boot.bin.sd.bin. On l’écrit en deux temps pour préserver la table de partitions (MBR) :

sudo dd if=/usr/lib/u-boot/x96maxplus-u-boot.bin.sd.bin of=/dev/mmcblk2 bs=1 count=444 conv=fsync
sudo dd if=/usr/lib/u-boot/x96maxplus-u-boot.bin.sd.bin of=/dev/mmcblk2 bs=512 skip=1 seek=1 conv=fsync

Le nom du périphérique (mmcblk2 ici) change selon les cartes : vérifiez-le avec lsblk avant d’écrire. Après cela, la box démarre seule depuis l’eMMC, puis lance le système du SSD.

Restauration. Avant toute écriture, sauvegardez l’eMMC complète (périphérique entier, plus boot0 et boot1). C’est ce qui permet de revenir en arrière si la réécriture du bootloader tourne mal.

Les pièges qui restent après la réparation

  • Identité du système. Le SSD réutilisé contenait encore un ancien système d’une autre box : les fichiers /etc/ophub-release et /etc/armbian-release annonçaient un SoC s905w. Je les ai remis sur s905x3 et le bon modèle. Relancer l’installeur avec une mauvaise étiquette, c’est refaire le brick.
  • Pont USB du SSD. Le pont JMicron JMS583 est instable en mode UAS (resets, accès lents). Le paramètre noyau usb-storage.quirks=152d:0583:u force le mode BOT et rend le SSD stable en 5000 Mb/s.

État final

Boot autonome de l’eMMC vers l’OS du SSD, sans carte SD, 4 Go de RAM réellement vus par Linux (3,7 Gio), WiFi actif.

TODO(nico) : joindre le log UART de la boucle de démarrage et celui du démarrage réussi.

Ce que je retiens

  1. Sauvegardez l’eMMC avant de lancer un installeur, pas après.
  2. Quand une box semble morte, branchez l’UART avant de conclure.
  3. Les options par défaut d’un installeur ne sont pas neutres : vérifiez quel bootloader il va écrire avant de le lancer.