🛠 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.

Objetivos

El CM3+ es uno de los pocos productos de consumo en los que se puede escribir código que se ejecuta sin ningún sistema operativo: el entorno Circle de rsta2 (repositorio github.com/rsta2/circle) lista explícitamente «Compute Module 3+ — Reported to work». Este tutorial compila un programa C++ desnudo para el BCM2837B0 (ARMv8-A, Cortex-A53), lo coloca en una tarjeta SD con el firmware de Raspberry Pi y lo ejecuta — la consola serie muestra la salida. Útil para entender la inicialización de un SoC, los controladores de registros o un producto de tiempo real estricto.

Material

Código completo

# 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

Verificación esperada

Sin Linux, la consola serie muestra la salida del programa Circle (mensaje «Hello» y luego bucle de parpadeo del LED si el código lo añade). El programa se ejecuta sobre el silicio desnudo: sin shell, sin planificador de Linux, arranque en unas pocas centenas de milisegundos. make clean && make AARCH64=1 recompila limpiamente.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales