🛠 Programmer un CM3+ en C++ nu (bare metal) avec Circle

Raspberry Pi Compute Module 3+ (CM3+ / CM3+ Lite) · avance · Schéma : un module CM3+ sur carte CMIO3 avec carte SD, relié par un câble série à un PC ; à l'écran, le code C++ compilé croise le compilateur aarch64 puis s'exécute sans système d'exploitation.

Objectifs

Le CM3+ est un des rares produits grand public sur lesquels on peut écrire du code exécuté sans aucun système d'exploitation : l'environnement Circle de rsta2 (dépôt github.com/rsta2/circle) liste explicitement « Compute Module 3+ — Reported to work ». Ce tutoriel compile un programme C++ nu pour le BCM2837B0 (ARMv8-A, Cortex-A53), le place sur une SD avec le firmware Raspberry Pi, et le lance — la console série affiche la sortie. Utile pour comprendre l'init d'un SoC, les pilotes registres, ou un produit temps réel dur.

Matériel

Code complet

# 1. Toolchain (via ARM GNU bare-metal ou paquet distribution)
arm-none-eabi-gcc --version   # ou aarch64-none-elf-gcc --version

# 2. Récupérer Circle et compiler l'exemple « hello » (mode 64 bits AArch64)
git clone https://github.com/rsta2/circle
cd circle/sample/01-helloworld
make -j4 CIRCLE_HOME=../.. AARCH64=1

# 3. Préparer la SD : partition FAT avec kernel8.img + les fichiers firmware
cp -r ../../testlibs ../.. ; # (les binaires RPiBasic/rpiboot ne sont pas requis)
cp kernel8.img /media/$USER/boot/kernel8.img
cp ../../testlibs/../../sample/01-helloworld/kernel8.img /media/$USER/boot/ 2>/dev/null
cat > /media/$USER/boot/config.txt <<'EOF'
enable_uart=1
arm_64bit=1
kernel=kernel8.img
EOF
sync && umount /media/$USER/boot

# 4. Démarrer le CM3+ : la console série 115200 affiche le programme

Vérification attendue

Sans Linux, la console série affiche la sortie du programme Circle (message « Hello » puis boucle de clignotement de la LED si le code l'ajoute). Le programme tourne sur le silicium nu : pas de shell, pas de scheduler Linux, démarrage en quelques centaines de millisecondes. make clean && make AARCH64=1 recompile proprement.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels