Микропроцессор ESP32-S31 получает поддержку Linux от Espressif Systems. двухъядерный RISC-V микропроцессор ESP32-S31 был впервые представлен в марте, две отладочные платы ESP32-S31 появились в мае, а несколько недель назад было объявлено о начале массового производства.
Новый RISC-V чип оснащён MMU (блок управления памятью), что значительно упрощает работу с Linux, а отладочные платы также оснащены 16 МБ PSRAM, поэтому возможен минимальный образ Linux. Переходя от теории к практике, компания Espressif Systems выпустила предварительную версию ESP Linux BSP для разработчиков для ESP32-S31, а также ведётся работа над некоторыми портами Linux от сообщества (подробнее об этом в конце статьи).
Следует рассмотреть официальный ESP Linux BSP. Упомянутый репозиторий содержит только макет образа и инструменты упаковки, используемые в интеграции Buildroot для ESP32-S31, а основная часть проекта находится в esp-buildroot-external репозитории с загрузочным стеком NOR для ESP32-S31 и корневой файловой системой на основе Buildroot 2025.02, а также инструкции по сборке и прошивке образа. Можно также напрямую ознакомиться с исходным кодом форка ядра Linux 6.18 используемого в предварительной версии для разработчиков.
Поскольку платы в наличии нет, можно попробовать собрать образ Linux. Для этого потребуется свежая версия утилиты esptool. Например, esptool 4.7.0 недостаточно: ESP32-S31 требует esptool 5.3.0 или новее, поэтому она была обновлена следующим образом:
sudo apt purge esptool
sudo apt install pipx
pipx ensurepath
pipx install esptool
Проверим версию:
$ esptool version
esptool v5.3.1
5.3.1
Получите код, следуя инструкциям из репозитория Buildroot External Tree:
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
Обратите внимание, что клонировать репозиторий esp-linux-bsp не нужно, так как Buildroot автоматически загрузит его.
Настройте сборку:
make -C esp-buildroot BR2_EXTERNAL=~/edev/sandbox/esp-buildroot-external O=~/edev/sandbox/esp32-s31-linux espressif_esp32s31_function_core_board_nor_defconfig
Убедитесь, что она завершается успешно и файл конфигурации записан:
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'
Теперь можно собрать Linux для ESP32-S31:
ESP_ESPTOOL=$(which esptool)
make -C ~/edev/sandbox/esp-buildroot O=~/edev/sandbox/esp32-s31-linux/ -j$(nproc)
Этот этап занял немало времени, более часа, поскольку система загружает и собирает пакеты. Тем не менее, теперь имеется готовый образ Linux для прошивки на плату.
...
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'
Содержимое каталога:
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
Если имеется плата ESP32-S31, для прошивки образа ОС можно использовать следующую команду:
esptool --chip esp32s31 --port <serial-port> --baud 1152000 write-flash 0x0 <path-to-output-directory>/images/s31_full_flash.bin
Обратите внимание: Linux BSP пока предназначен только для экспериментов, не рекомендуется для производства и поддерживает только ESP32-S31. Espressif также упоминает «нерегулярные обновления», возможные «критические изменения», «ограниченную поддержку функций», а ошибки будут исправляться «по мере возможности» в период Developer Preview. Также неясно, что уже реализовано, например, работает ли WiFi?
Помимо официального Linux BSP, как минимум два проекта сообщества занимаются портированием Linux на плату ESP32-S31-Korvo-1:
- Работа GrieferPig — это порт MMU RV32 Linux 6.12, работающий нативно на микроконтроллере ESP32-S31. Rootfs Buildroot и перезагрузка стабильны, выключение питания не реализовано, а такие функции, как WiFi, двухрежимный Bluetooth и поддержка двухъядерного режима, являются экспериментальными. Полный статус и код можно посмотреть на GitHub .
- Проект esp32-s31-linux от Marco переносит Linux 7.1 и OpenSBI 1.9 на плату ESP32-S31 Korvo-1. Большинство периферийных устройств, кроме LCD-панели, слота microSD, USB-host и WLAN-модема, пока не включены. Посмотрите проект на GitHub.

Выражаем свою благодарность источнику, с которого взята и переведена статья, сайту cnx-software.com.
Оригинал статьи вы можете прочитать здесь.

