3.1 KiB
3.1 KiB
03 — Test de compilación: blink ESP32-P4
Setup
arduino-cli 1.4.1(commite39419312, 2026-01-19) enC:/Users/000272869/bin/arduino-cli.- Core
esp32:esp32 3.3.8ya instalado (la última disponible al 2026-05-06). - Sketch:
test/test-esp32-p4/sketches/blink/blink.ino(toggle GPIO2 + Serial.println, 25 líneas).
Comando ejecutado
cd test/test-esp32-p4/sketches
arduino-cli compile --fqbn esp32:esp32:esp32p4 blink \
--output-dir ../../binaries/blink # nota: el flag --output-dir falló, usé el build/ default
Output
Sketch uses 312698 bytes (23%) of program storage space. Maximum is 1310720 bytes.
Global variables use 21980 bytes (6%) of dynamic memory, leaving 305700 bytes for local variables. Maximum is 327680 bytes.
Exit code: 0. Tiempo de compilación: ~50 s en frío.
Artefactos generados
sketches/blink/build/esp32.esp32.esp32p4/:
| Archivo | Tamaño | Para qué sirve |
|---|---|---|
blink.ino.bin |
312 880 B | Imagen de la app (sin bootloader). |
blink.ino.bootloader.bin |
21 392 B | Bootloader (offset 0x0000 en flash). |
blink.ino.partitions.bin |
3 072 B | Tabla de particiones (offset 0x8000). |
blink.ino.merged.bin |
4 194 304 B (4 MB) | Imagen lista para qemu -drive if=mtd,format=raw. |
blink.ino.elf |
7 361 896 B | ELF debug; el que abriría GDB. |
boot_app0.bin |
8 192 B | OTA selector. |
flash_args |
172 B | Offsets para esptool.py write_flash. |
partitions.csv, sdkconfig, build.options.json, blink.ino.map |
misc | metadatos / map de símbolos. |
Identificación del ELF
$ file blink.ino.elf
ELF 32-bit LSB executable, UCB RISC-V, RVC, single-float ABI, version 1 (SYSV),
statically linked, with debug_info, not stripped
Confirma:
- RISC-V 32-bit little-endian →
qemu-system-riscv32. - RVC (compressed instructions, RV32C extension).
- single-float ABI (
ilp32f) — el chip tiene FPU single-precision.
flash_args (offsets para flashing)
--flash_mode keep --flash_freq keep --flash_size keep
0x0000 blink.ino.bootloader.bin
0x8000 blink.ino.partitions.bin
0xe000 boot_app0.bin
0x10000 blink.ino.bin
Notar: bootloader en 0x0000 (igual que ESP32-C3), no 0x1000 (como ESP32 Xtensa). El switch bootloader_offset en arduino_cli.py:369 ya hace 0x0000 if _is_esp32c3_board(...) else 0x1000. Para P4 hay que extender ese helper a "ES_RISCV_BOARD" y meter ahí también esp32p4*.
Conclusiones
- La cadena de toolchain para ESP32-P4 está lista en arduino-cli sin cambios.
- El binary final (
merged.bin4 MB) es plug-and-play para QEMU vía-drive if=mtd,format=raw,file=...— el mismo patrón que ya usa elesp_qemu_manager. - Lo único que falta a nivel toolchain son ajustes menores en el código de Velxio:
arduino_cli.py: extender_is_esp32c3_board()a un_is_riscv_esp32()que cubra C3, C6, P4 y H2 para el offset 0x0000.compile.py: aceptar el FQBNesp32:esp32:esp32p4como ESP32-family.
- No hay forma de probar el ejecutable hoy —
qemu-system-riscv32 -M esp32p4no existe.