El microprocesador ESP32-S31 recibe soporte de Linux por parte de Espressif Systems. El microprocesador RISC-V de doble núcleo ESP32-S31 se presentó por primera vez en marzo, dos placas de desarrollo basadas en el ESP32-S31 llegaron en mayo y hace unas semanas se anunció el inicio de su producción en masa.
El nuevo chip RISC-V incorpora una MMU (unidad de gestión de memoria), lo que facilita enormemente el manejo de Linux, y las placas de desarrollo incluyen además 16 MB de PSRAM, por lo que es posible ejecutar una imagen mínima de Linux. De la teoría a la práctica: Espressif Systems acaba de publicar una versión preliminar para desarrolladores del BSP de Linux de ESP para el ESP32-S31, y también hay en marcha varios ports de Linux realizados por la comunidad (más sobre esto al final del artículo).
Centrémonos en el BSP oficial de Linux de ESP. El repositorio mencionado solo contiene el esquema de la imagen y las herramientas de empaquetado utilizadas en la integración de Buildroot para el ESP32-S31; el núcleo del proyecto se encuentra en el repositorio esp-buildroot-external, que incluye la pila de arranque NOR del ESP32-S31 y el sistema de archivos raíz con Buildroot 2025.02, junto con las instrucciones para compilar y flashear una imagen. También puedes consultar directamente el código fuente del fork del kernel Linux 6.18 utilizado en la versión preliminar.
No tengo ninguna placa, así que me limitaré a intentar compilar la imagen de Linux. Para ello sigue siendo necesaria una versión reciente de la utilidad esptool. La mía era la 4.7.0, pero el ESP32-S31 requiere esptool 5.3.0 o superior, así que la he actualizado de la siguiente manera:
|
1 2 3 4 |
sudo apt purge esptool sudo apt install pipx pipx ensurepath pipx install esptool |
Comprobemos la versión:
|
1 2 3 |
$ esptool version esptool v5.3.1 5.3.1 |
Descarguemos el código siguiendo las instrucciones del repositorio Buildroot External Tree:
|
1 2 3 |
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 |
Os habréis dado cuenta de que no ha hecho falta clonar el repositorio esp-linux-bsp, ya que Buildroot lo descargará automáticamente.
Configuremos la compilación:
|
1 |
make -C esp-buildroot BR2_EXTERNAL=~/edev/sandbox/esp-buildroot-external O=~/edev/sandbox/esp32-s31-linux espressif_esp32s31_function_core_board_nor_defconfig |
Asegurémonos de que el proceso se completa correctamente y de que se genera el archivo de configuración:
|
1 2 3 4 5 6 |
make: Entering directory '/home/jaufranc/edev/sandbox/esp-buildroot' GEN /home/jaufranc/edev/sandbox/esp32-s31-linux/Makefile # # configuration written to /home/jaufranc/edev/sandbox/esp32-s31-linux/.config # make: Leaving directory '/home/jaufranc/edev/sandbox/esp-buildroot' |
Ya estamos listos para compilar Linux para el ESP32-S31:
|
1 2 |
ESP_ESPTOOL=$(which esptool) make -C ~/edev/sandbox/esp-buildroot O=~/edev/sandbox/esp32-s31-linux/ -j$(nproc) |
Esta parte tardó bastante, más de una hora, ya que el sistema descarga los paquetes y los compila. Aun así, ya tenemos nuestra imagen de Linux lista para flashear en la placa.
|
1 2 3 4 5 6 7 8 9 10 11 |
... gen_esp_flash_image: wrapping SPL -> spl_app.bin (load 0x2F040000) esptool v5.3.1 Creating ESP32-S31 image... Successfully created ESP32-S31 image. 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 in /home/jaufranc/edev/sandbox/esp32-s31-linux/images make: Leaving directory '/home/jaufranc/edev/sandbox/esp-buildroot' |
Contenido del directorio:
|
1 2 3 4 5 |
jaufranc@CNX-LAPTOP-5:~/edev/sandbox$ ls esp32-s31-linux/images/ esp32s31.dtb fw_jump.elf rootfs.tar u-boot.dtb fw_dynamic.bin rootfs.cpio s31_full_flash.bin u-boot.itb fw_dynamic.elf rootfs.cpio.gz spl_app.bin u-boot-spl-dtb.bin fw_jump.bin rootfs.cramfs u-boot.bin xipImage |
Si tenéis una placa ESP32-S31, deberíais poder utilizar el siguiente comando para flashear la imagen del sistema operativo:
|
1 |
esptool --chip esp32s31 --port <serial-port> --baud 1152000 write-flash 0x0 <path-to-output-directory>/images/s31_full_flash.bin |
Tened en cuenta que, por ahora, el BSP de Linux es solo para experimentación, no está recomendado para producción y está dirigido únicamente al ESP32-S31. Espressif también menciona «actualizaciones irregulares», posibles «cambios que rompen la compatibilidad», «aceptación limitada de funciones» y que los errores se corregirán «en la medida de lo posible» durante la vista previa para desarrolladores. Tampoco está claro qué se ha implementado hasta ahora: por ejemplo, ¿funciona el WiFi?
Además del BSP oficial de Linux, al menos dos proyectos de la comunidad están portando Linux a la placa ESP32-S31-Korvo-1:
- El trabajo de GrieferPig es un port de Linux 6.12 RV32 con MMU que se ejecuta de forma nativa en un microcontrolador ESP32-S31. El rootfs de Buildroot y el reinicio son estables, el apagado no está implementado y funciones como el WiFi, el modo Bluetooth dual y el soporte de doble núcleo son experimentales. Podéis consultar el estado completo y el código en GitHub.
- El esp32-s31-linux de Marco lleva Linux 7.1 y OpenSBI 1.9 a la placa ESP32-S31 Korvo-1. La mayoría de los periféricos, salvo el panel LCD, la ranura microSD, el host USB y el módem WLAN, aún no están habilitados. Echad un vistazo al proyecto en GitHub.
Gracias a Andy por la pista.
Traducido del artículo en inglés «Espressif Systems releases a Linux BSP developer preview for ESP32-S31 RISC-V microprocessor» de Jean-Luc Aufranc (CNXSoft).
Publicaciones traducidas automáticamente
