# Flasher une image vers l'eMMC du module CM4. {{METATOC 4-5}} Lorsque le module de calcul dispose d'un dispositif **eMMC**, ce guide explique comment écrire des données sur le stockage **eMMC** à l'aide d'une carte E/S de module de calcul. Il faut que le module de calcul soit correctement installé sur la carte d'E/S. Il doit reposer à plat sur la carte d'E/S. Il faut que **nRPBOOT** qui est sur **J2** (désactiver le démarrage **eMMC**) sur le cavalier de la carte IO est installé Utiliser un câble micro USB pour connecter le port esclave micro USB MCRO\_USB sur la carte IO au périphérique hôte. Ne pas mettre encore sous tension. ####Construire rpiboot sur le système hôte AFin d'utiliser Git pour obtenir le code source de **rpiboot**, il faut que Git soit installé. Sur un Raspberry Pi ou une autre machine Linux basée sur Debian, utiliser la commande suivante : ``` sudo apt update sudo apt upgrade -y sudo apt install git ``` Git peut produire une erreur si la date n'est pas définie correctement. Sur un Raspberry Pi, entrer ce qui suit pour corriger cela : ``` sudo date MMJJhhmm ``` où **MM** est le mois, **DD** est la jour, et **hh** et **mm** sont respectivement les heures et les minutes. Cloner le dépôt de l'outil **usbboot**: ``` git clone --depth=1 https://github.com/raspberrypi/usbboot cd usbboot ``` **libusb** doit être installé. Sur Raspberry Pi OS ou autre Linux basé sur Debian, entrer la commande suivante : ``` sudo apt install libusb-1.0-0-dev ``` Construire et installer maintenant l'outil **usbboot**: ``` make ``` Exécuter l'outil **usbboot** et il attendra une connexion : ``` sudo ./rpiboot ``` Brancher maintenant la machine hôte dans le port esclave USB de la carte E/S du module de calcul et allumer la carte CMIO. L'outil **rpiboot** découvrira le module de calcul et enverra le code de démarrage pour permettre l'accès à l'**eMMC**. ####Ecrire sur l'eMMC (Linux) Une fois **rpiboot** terminé, on peut voir un nouveau périphérique apparaître ; il s'agit généralement de `/dev/sda` sur un Raspberry Pi, mais il peut s'agir d'un autre emplacement tel que `/dev/sdb`, alors vérifier `/dev/` ou exécutez **lsblk** avant d'exécuter **rpiboot** afin d'identifier l'**eMMC**. Une fois le périphérique identifié, écrire une image brute du système d'exploitation (telle que Raspberry Pi OS) sur l'appareil. L'exécution de la commande suivante peut prendre un certain temps, selon la taille de l'image : (Remplacer `/dev/sdX` par le périphérique approprié.) ``` sudo dd if=raw_os_image_of_your_choice.img of=/dev/sdX bs=4MiB ``` Une fois l'image écrite, débrancher et rebrancher la clé USB ; on doit voir apparaître deux partitions (pour Raspberry Pi OS) dans `/dev`. Au total, on doit voir quelque chose de similaire à ceci : ``` /dev/sdX <- Périphérique /dev/sdX1 <- Première partition (FAT) /dev/sdX2 <- Deuxième partition (système de fichiers Linux) ``` Les partitions `/dev/sdX1` et `/dev/sdX2` peuvent maintenant être montées normalement. Il faut s'assurer que J2 (nRPBOOT) est réglé sur la position désactivée et/ou que rien n'est branché sur le port esclave USB. Le redémarrage de la carte d'E/S devrait maintenant entraîner le démarrage du module de calcul à partir d'**eMMC**. ####Configuration du Bootloader La configuration du chargeur de démarrage par défaut sur CM4 est conçue pour prendre en charge la mise en place et le développement sur une carte d'E/S du module de calcul 4 et la version du logiciel flashé peut être antérieure à la dernière version. Lors de l'acquisition des produits finaux, il faut considérer : - Sélection et vérification d'une version spécifique du chargeur de démarrage. La version du référentiel **usbboot** est toujours une version stable récente. - Configuration du périphérique de démarrage (par exemple, démarrage réseau). - Activation de la protection en écriture matérielle sur l'**EEPROM** du chargeur de démarrage pour garantir que le chargeur de démarrage ne peut pas être modifié sur des produits distants/inaccessibles. La ROM du module de calcul 4 n'exécute jamais **recovery.bin** à partir de SD/EMMC et le service **rpi-eeprom-update** n'est pas activé par défaut. Cela est nécessaire car l'EMMC n'est pas amovible et un fichier **recovery.bin** non valide empêcherait le démarrage du système. Cela peut être remplacé et utilisé avec le mode d'auto-mise à jour où le chargeur de démarrage peut être mis à jour à partir d'un MSD USB ou d'un démarrage réseau. Cependant, le mode d'auto-mise à jour n'est pas une mise à jour atomique et n'est donc pas sûr en cas de panne de courant pendant la mise à jour de l'**EEPROM**. #####Modification de la configuration du bootloader Pour modifier la configuration du chargeur de démarrage CM4 : ``` cd usbboot/recovery ``` Remplacer `pieeprom.original.bin` si une version spécifique du chargeur de démarrage est requise. Modifier le fichier de configuration du chargeur de démarrage `boot.conf` par défaut. Typiquement, au moins le **BOOT\_ORDER** doit être mis à jour : * Pour le démarrage réseau `BOOT_ORDER=0xf2` * Pour le démarrage SD/EMMC `BOOT_ORDER=0xf1` * Pour le démarrage USB basculant vers EMMC `BOOT_ORDER=0xf15` Exécuter `./update-pieeprom.sh` pour mettre à jour le fichier image de l'image EEPROM `pieeprom.bin`. Si la protection en écriture **EEPROM** est requise, modifier config.txt et ajouter `eeprom_write_protect=1`. La protection en écriture matérielle doit être activée via le logiciel, puis verrouillée en tirant la broche **EEPROM\_nWP** vers le bas. Exécuter `../rpiboot -d`. pour mettre à jour le chargeur de démarrage à l'aide de l'image **EEPROM** mise à jour `pieeprom.bin` Le fichier `pieeprom.bin` est maintenant prêt à être flashé sur le Compute Module 4. #####Flasher l'EEPROM du bootloader Pour flasher l'**EEPROM** du chargeur de démarrage, suivez la même configuration matérielle que pour flasher l'EMMC, mais il faut également que l'**EEPROM\_nWP** ne soit PAS à l'état bas. Une fois terminé, **EEPROM\_nWP** peut être de nouveau mis à l'état bas. ``` # Écrit recovery/pieeprom.bin dans l'EEPROM du bootloader. ./rpiboot -d récupération ```