El microprocesador ESP32-S31 ya tiene soporte de Linux por parte de Espressif Systems. El ESP32-S31, un microprocesador RISC-V de doble núcleo, se presentó en marzo, dos placas de desarrollo llegaron en mayo y la producción en masa se anunció hace algunas semanas.

El nuevo chip RISC-V incorpora una MMU (unidad de gestión de memoria), lo que vuelve mucho más manejable correr Linux, y las placas de desarrollo traen además 16 MB de PSRAM, así que una imagen mínima del sistema es posible. Pasando de la teoría a la práctica, Espressif liberó ahora una versión de vista previa para desarrolladores del ESP Linux BSP para el ESP32-S31, y hay también un par de portes comunitarios en camino.

¿Qué contiene realmente el BSP oficial?

El repositorio recién mencionado solo contiene el diseño de imagen y las herramientas de empaquetado que usa la integración con Buildroot para el ESP32-S31. El núcleo del proyecto está en el repositorio esp-buildroot-external, con la pila de arranque NOR y el sistema de archivos raíz sobre Buildroot 2025.02, más las instrucciones para compilar y grabar una imagen. También se puede revisar directamente el código fuente del fork del kernel Linux 6.18 que usa esta vista previa.

¿Cómo se compila la imagen?

El autor de la nota no dispone de una placa, así que se limitó a construir la imagen. Sigue haciendo falta una versión reciente de la utilidad esptool: la suya era la 4.7.0 y el ESP32-S31 exige esptool 5.3.0 o superior, de modo que la actualizó vía pipx, quedando en la versión 5.3.1.

Después clonó el árbol de Buildroot y el árbol externo de Espressif:

Código
mkdir ~/edev/sandbox
git clone --branch 2025.02 --depth 1 https://gitlab.com/buildroot.org/buildroot.git esp-buildroot
git clone -b buildroot/v2025.02-esp32s31 https://github.com/espressif/esp-buildroot-external.git esp-buildroot-external

No hace falta clonar el repositorio esp-linux-bsp, porque Buildroot lo descarga solo. La configuración se genera con el defconfig de la placa (espressif_esp32s31_function_core_board_nor_defconfig) y luego se lanza la compilación completa apuntando ESP_ESPTOOL a la ruta del binario actualizado.

Esa parte toma su tiempo, bastante más de una hora, porque el sistema descarga los paquetes y los construye uno a uno. Al terminar, la salida deja la imagen lista para grabar:

Código
gen_esp_flash_image: merging slots -> s31_full_flash.bin
esptool v5.3.1
SHA digest in image updated.
Wrote 0xd1f000 bytes to file 's31_full_flash.bin', ready to flash to offset 0x0.
gen_esp_flash_image: s31_full_flash.bin (13758464 bytes) ready

Son 13.758.464 bytes, es decir unos 13,1 MiB de imagen completa, cómodamente dentro de los 16 MB de PSRAM de las placas. El directorio de salida queda con el árbol habitual de un arranque RISC-V: esp32s31.dtb, fw_dynamic.bin y fw_jump.bin de OpenSBI, los distintos formatos del sistema de archivos raíz (rootfs.tar, rootfs.cpio, rootfs.cramfs), U-Boot con su SPL y el xipImage del kernel.

¿Cómo se graba y se accede a la consola?

Con una placa ESP32-S31 a mano, el comando de grabado apunta al binario unificado:

Código
esptool --chip esp32s31 --port <puerto-serial> --baud 1152000 write-flash 0x0 <ruta-de-salida>/images/s31_full_flash.bin

La consola de Linux queda accesible a 115200 baudios.

¿Está listo para producción?

No, y Espressif lo dice sin ambigüedad. El BSP es por ahora solo para experimentación, no se recomienda para producción y apunta exclusivamente al ESP32-S31. La compañía habla además de actualizaciones irregulares, posibles cambios que rompan compatibilidad, aceptación limitada de nuevas funciones y corrección de errores en la modalidad de mejor esfuerzo durante la vista previa. Tampoco queda claro qué está implementado hasta ahora: por ejemplo, no se sabe si el WiFi funciona.

Dos portes comunitarios en paralelo

Además del BSP oficial, al menos dos proyectos de la comunidad vienen portando Linux a la placa ESP32-S31-Korvo-1:

  • El trabajo de GrieferPig es un porte de Linux 6.12 para RV32 con MMU corriendo de forma nativa en el microcontrolador. El sistema de archivos raíz de Buildroot y el reinicio son estables, el apagado no está implementado, y funciones como WiFi, Bluetooth de doble modo y soporte de doble núcleo siguen en estado experimental. El estado completo y el código están en GitHub.
  • El proyecto esp32-s31-linux de Marco lleva Linux 7.1 y OpenSBI 1.9 a la misma placa Korvo-1. La mayoría de los periféricos distintos del panel LCD, la ranura microSD, el host USB y el módem WLAN todavía no están habilitados. El proyecto también está en GitHub.
Porte de Linux 6.12 para el ESP32-S31 hecho por GrieferPig
Porte de Linux 6.12 para el ESP32-S31 hecho por GrieferPig

Comparativa de los tres caminos

ProyectoKernelEstadoBase
ESP Linux BSP (oficial)Linux 6.18 (fork)Vista previa para desarrolladores, sin uso en producciónBuildroot 2025.02, arranque NOR
Porte de GrieferPigLinux 6.12Raíz y reinicio estables; WiFi, Bluetooth y doble núcleo experimentalesESP32-S31-Korvo-1
Porte de MarcoLinux 7.1Mayoría de periféricos aún sin habilitarESP32-S31-Korvo-1, OpenSBI 1.9

Para quien quiera evaluarlo desde la región, el punto de entrada más realista sigue siendo la placa Korvo-1 que usan los dos portes comunitarios, ya que es la que concentra el trabajo de depuración publicado hasta ahora. Conviene tener presente que las tres vías comparten la misma restricción de fondo: 16 MB de PSRAM alcanzan para un Linux mínimo con Buildroot, no para una distribución de escritorio ni para un espacio de usuario con systemd completo.