Comment installer Pi OS sur un Compute Module 5 équipé d'une eMMC

Introduction

Le compute module 5 (tout comme le CM4) existe en deux versions aux comportement fort différents:

  • CM5 Lite où il n'y a pas de stockage eMMC. Dans ce cas, l'OS est chargé depuis une carte SD. En cela, cela ne change en rien du fonctionnement d'un Raspberry-Pi 5.
  • CM5 avec stockage eMMC : le système d'exploitation est alors chargé depuis l'eMMC. Le connecteur SD n'est pas utilisable dans ce cas! 
Comment flasher l'eMMC
 

La question à laquelle il faut trouver une réponse est:

Comment installer Raspberry-Pi OS dans l'eMMC?

Si comme moi vous disposez d'un Kit de développement Compute Module 5 alors cette question est plus que pertinente.

La documentation officielle

l'article "Flash an image to a Compute Module" sur Raspberrypi.com apporte une réponse technique où il est possible de s'égarer.

Il me parait utile de préciser que SecurBoot et la Signature ne sont pas indispensables! Savoir cela peut grandement simplifier les opérations d'installation (ce qui est pratique lors de nos premières fois).

Principe d'installation

  1. Configurer l'IO board pour désactiver le boot eMMC (avec un jumper/cavalier).
  2. Brancher le CM5 sur un ordinateur a l'aide du cable USB-A ==> USB-C.
  3. Mettre le Compute Module sous tension (en pressant le bouton marche/arrêt sur l'IO board).
  4. Utiliser le logiciel rpiboot avec mass-storage-gadget64 sur l'ordinateur.
    Ce qui expose l'eMMC sur l'ordinateur par l'intermédiaire du lien USB.
  5. Utiliser RPI-Imager pour flasher une image Raspberry-Pi 5 sur l'eMMC.

Installer rpiboot

Le logiciel rpiboot est l'une des pierres angulaires du processus d'installation.
Il est préférable d'utiliser ce logiciel depuis une machine Linux (sous Ubuntu ou depuis un Raspberry-Pi).
A noter qu'il est également possible d'utiliser Windows au pris de quelques adaptations.

rpiboot peut être installé sur une machine Linux en utilisant la commande:

$ sudo apt install rpiboot

Si l'installation apt n'est pas possible par ce qu'un OS Linux est "plus agé" (comme c'est mon cas avec Linux Mint, un dérivé d'Ubuntu) alors il faudra compiler rpiboot sur votre ordinateur... comme je l'ai fait.

A propos de rpiboot

rpiboot est une interface générique de chargement de firmware. Il permet de booter un RPi distant et d'y charger un firmware spécifique... idéal pour tester vos images personnalisés / SecurBoot / etc.

L'un des firmwares spécialisés est mass-storage-gadget64 qui émule un périphérique de stockage de masse  dit MSD (Mass Storage Device). L'ordinateur hôte traitera alors le Pi comme un périphérique de stockage USB.

Compiler rpiboot

S'il n'a pas été possible d'installer le logiciel rpiboot alors il faudra le compiler directement depuis le code source.

Ce code source est disponible sur le dépôt raspberrypi/usbboot :

Voici les instructions permettant de compiler sur votre ordinateur:

$ sudo apt install git libusb-1.0-0-dev pkg-config build-essential
$ git clone --recurse-submodules --shallow-submodules --depth=1 https://github.com/raspberrypi/usbboot
$ cd usbboot
$ make

Une compilation qui se passe comme sur des roulettes.

Préparer votre configuration

Désactiver le boot eMMC

Avant de brancher votre DevKit sur l'ordinateur, il convient de désactiver le boot eMMC! Cela permettra de charger un firmware via USB avec rpiboot.

Commencez par placer le cavalier sur la position "disable eMMC boot".

Placer le cavalier "disable eMMC boot"

Brancher en USB

Assurez-vous que l'utilisateur fait déjà partie du groupe "plugdev". Cela peut facilement être vérifié avec la commande groups.

$ groups
domeu adm dialout cdrom sudo dip plugdev lpadmin sambashare vboxusers

Branchez ensuite le DevKit sur votre ordinateur avec le câble USB.
Ne pas oublier de presser le bouton marche/arrêt pour démarrer le computer module!


Utilisez dmesg pour vérifier la détection du Compute Module (le module Broadcom).

Démarrer rpiboot

1iere tentative

A mon premier démarrage, rpiboot ne trouvait pas mass-storage-gadget64 .

Voici les messages pour mémoires.

$ sudo ./rpiboot
RPIBOOT: build-date Dec  9 2024 version 20240422~085300 cbcf2934
Waiting for BCM2835/6/7/2711/2712...
2712: Directory not specified using default /usr/share/rpiboot/mass-storage-gadget64/
read_file: Failed to read "2712/bootcode5.bin" from "/usr/share/rpiboot/mass-storage-gadget64//bootfiles.bin" - No such file or directory
Failed to open bootcode5.bin

2ieme tentative

J'ai donc utilisé le paramètre -d pour indiquer le répertoire de stockage pour mass-storage-gadget64 . Il se fait que c'est un sous-répertoire direct de rpi-boot.

$ ./rpiboot -v -d mass-storage-gadget64

Alors malgré ma présence dans le groupe plugdev, je reçois un message d'erreur laissant entendre que "je ne fais peut-être pas partie du groupe plugdev"!
Voyez ci-dessous le message d'erreur.

...
2712/memsys03.bin position 0008b000 size 40972
2712/bootcode5.bin position 00095400 size 72660
Completed file-read 2712/bootcode5.bin in archive mass-storage-gadget64/bootfiles.bin length 72660
Permission to access USB device denied. Make sure you are a member of the plugdev group.

$ groups
domeu adm dialout cdrom sudo dip plugdev lpadmin sambashare vboxusers

3ieme tentative

Cette fois, je me suis fendu d'un sudo pour augmenter les privilège. Et cela à fonctionné :-)

$ sudo ./rpiboot -v -d mass-storage-gadget64
RPIBOOT: build-date Dec  9 2024 version 20240422~085300 cbcf2934
Boot directory 'mass-storage-gadget64'
Loading: mass-storage-gadget64/bootfiles.bin
Using mass-storage-gadget64/bootfiles.bin
Waiting for BCM2835/6/7/2711/2712...
Device located successfully
...
...
...
File 2712/boot.img not found in mass-storage-gadget64/bootfiles.bin
Loading: mass-storage-gadget64/boot.img
File size = 30409216 bytes
Received message ReadFile: boot.img
File read: boot.img
libusb_bulk_transfer sent 30409216 bytes; returned 0
Received message Done: boot.img
CMD exit
Second stage boot server done
rpi-boot ayant finalement démarré mass-storage-gadget64 sur le compute module, notre système hôte devrait avoir accès à un nouveau lecteur/drive... ce que nous allons constater de suite.

Accès à l'eMMC

Avec le mass-storage-gadget64 actif sur le compute module, l'ordinateur hôte à maintenant accès à un nouveau lecteur branché via USB.

Voici deux méthode pour s'en assurer.

lsblk : lister les périphérique de type block

la commande lsblk affiche tous les lecteurs branchés sur l'ordinateur.

$ lsblk
NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
...
sda      8:0    0 232,9G  0 disk 
├─sda1   8:1    0   512M  0 part /boot/efi
└─sda2   8:2    0 232,4G  0 part /
sdb      8:16   1  29,1G  0 disk 
sr0     11:0    1  1024M  0 rom

La commande révèle un disque sdb d'une  taille de 29.1 Go. Il s'agit de l'eMMC présent sur le compute module.

Le gestionnaire de disque

Les distributions Linux proposent généralement un gestionnaire de disque permettant d'inspecter les lecteurs/disques et le détail de leur partition.
Voyez ci-dessous une capture du gestionnaire de disque sous Linux Mint (dérivé d'Ubuntu).

Nous y retrouvons également le disque de 31 Go du compute module.
Cette fois les informations sont plus précise avec un modèle de disque reprenant la mention "mmcblk0 Raspberry Pi multi-fonction USB device (100)" .

Quel OS pour mon CM5

L'idéal est de créer un OS sur mesure pour votre projet enfoui.
Mais cela serait bien trop long pour réaliser notre premier test!

Par chance, le CM5 est un équivalent du Raspberry-Pi 5 et l'IO Board du Dev Kit propose -à peu prêt- les mêmes périphériques qu'un Raspberry-Pi 5.

Nous pourrons donc flasher un OS Pi 5 pour réaliser nos premiers essais avec le Compute Module 5.

Flasher l'OS sur CM5

Le documentation renseigne l'utilitaire Linux dd pour transférer l'image sur le disque eMMC. Mais dd est aussi surnommé Disk Destroyer parce qu'une simple erreur dans son utilisation peu littéralement écraser/détruire le contenu de votre disque.

L'approche la plus simple est encore d'utiliser RPi-imager qui fera le même boulot (mais avec moins de risque).

Choisir un OS Raspberry-pi 5 / 64 bits
 

Choisir le périphérique correspondant au disque mmcblk0.

Bien que pas forcement nécessaire pour un OS avec bureau graphique j'ai néanmoins personnalisé mon OS.

personnalisation du système d'exploitation

Pas forcement inutile pour un projet enfoui, l'activation du service SSH sera certainement se monter utile.

Activer le service SSH

Démarrer votre CM5

Une fois flashé:

  1. Eteindre le CM5 avec le bouton marche arrêt
  2. Débrancher de l'ordinateur hôte
  3. Brancher le câble HDMI sur la sortie HDMI0
  4. Brancher le bloc d'alimentation sur la prise USB-C.
  5. Presser le bouton marche/arrêt et soyez patient!

Comme pour un Pi 5, le CM5 redimensionnera le disque et rebootera une ou deux fois avant d'afficher quelque-chose sur la sortie HDMI.

Fiez vous à la LED activity qui rapporte les accès disques.

La LED power est:

  • éteinte ==> CM5 est activé
  • allumé ==> CM5 hors tension 

Et voici ci-dessous le démarrage du CM5 :

MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible. 

SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

Aucun commentaire