Chip news · ESP32 · Linux
The ESP32 that runs Linux: meet the ESP32-S31
A microcontroller that boots Linux
An ESP32 can now boot a real Linux kernel all the way to a shell. The chip doing it is Espressif's new ESP32-S31, and it's why the maker world is buzzing this week.
People have squeezed Linux onto ESP32s before, but those were clever hacks that ran very slowly. The S31 is different. It has the hardware Linux actually needs built in, and Espressif itself has released Linux support for it.
So is the humble ESP32 about to take on the Raspberry Pi? Let's look at what's really going on.
Meet the ESP32-S31
The S31 is best thought of as a much beefier ESP32-S3. Espressif unveiled it in March, dev boards followed in May, and mass production was announced in August.
One surprise: the "S" series has always used Xtensa cores, but the S31 uses RISC-V cores, borrowed from the high-end ESP32-P4. An Espressif engineer has suggested it could be close to twice as fast as an S3.
Here's how it stacks up against the S3 most of us know:
| Feature | ESP32-S3 | ESP32-S31 |
|---|---|---|
| CPU | Dual-core Xtensa LX7, 240 MHz | Dual-core RISC-V, up to 320 MHz |
| Wi-Fi | Wi-Fi 4 (2.4 GHz) | Wi-Fi 6 (2.4 GHz) |
| Bluetooth | LE 5 only | Classic + LE 5.4, incl. LE Audio |
| Thread / Zigbee | No | Yes |
| Ethernet | None built in | Gigabit MAC |
| GPIO | 45 | 60 |
| PSRAM | Octal SPI, 80 MHz | Octal DDR, up to 250 MHz |
| USB | Full-speed OTG | USB 2.0 High-Speed OTG |
| MMU for Linux | No | Yes |
Bluetooth Classic is a nice bonus. Until now, if you wanted Classic Bluetooth audio you had to go back to the original ESP32.
If you want one to play with, the ESP32-S31-Function-CoreBoard-1 (16 MB PSRAM, gigabit Ethernet, USB 2.0) is around US$20, roughly A$30, on AliExpress.
Why this ESP32 can run Linux
The key ingredient is an MMU (memory management unit). Proper Linux uses it to give every program its own protected memory. No earlier ESP32 had one, which is why past Linux attempts were so limited.
The S31 adds the MMU, and the dev boards pair it with 16 MB of fast PSRAM. That's tiny by PC standards, but enough for a minimal Linux system.
Three projects have already made it work:
- Espressif's official Linux BSP (released 22 August). It's a Linux 6.18 kernel built with Buildroot and U-Boot, all packed into a single flash image. Espressif is clear it's a developer preview, not ready for real products.
- GrieferPig's port runs Linux 6.12 on a single core. The Wi-Fi driver is in but untested, and GPIO support is still to come.
- annoyedmilk's port runs Linux 7.1 with a microSD card mounted at boot and a high-speed USB host port (keyboards and mice for now). Driving the board's 800 × 480 LCD is at the proof-of-concept stage.
A neat trick in these builds: the kernel runs straight from flash (called XIP, execute-in-place), so none of the precious 16 MB of RAM is wasted holding it.
Is it a Raspberry Pi killer?
Not yet, and probably not this chip. Here's the reality check:
- Memory: 16 MB of RAM versus gigabytes on a Pi. You'll get a terminal, not a desktop.
- No GPU: there's a 2D graphics accelerator, but nothing that could drive a full Linux desktop.
- One core for Linux: both community ports run Linux on a single core, and at least one does it without the double-precision floating point Linux normally expects.
- Early days: even Espressif says its Linux support isn't for production yet.
What's exciting is the direction. The S31 is the first ESP32 whose peripherals, bandwidth and CPU design look like a small single-board computer. A future chip with more RAM could genuinely close the gap.
For now, think of it as a very capable microcontroller that can run Linux when you need standard networking tools, rather than a Pi replacement.
What it means for MicroPython makers
If you build with MicroPython and Thonny like I do, here's the practical picture:
- No S31 MicroPython firmware yet. As of today, micropython.org lists builds for the ESP32, S2, S3, C2, C3, C5, C6, H2 and P4, but not the S31. MicroPython has been adding new Espressif chips steadily, the C5 and P4 most recently, so I'd expect it to follow.
- Linux on the S31 is not a Thonny job. Flashing the Linux image uses esptool (version 5.3.0 or newer) and a serial console, not the MicroPython REPL.
- Your MicroPython skills still transfer. Once firmware lands, the S31's 60 GPIO, gigabit Ethernet and Classic Bluetooth could make it a brilliant MicroPython board for home automation and audio projects.
My take
If you want to tinker with Linux on a microcontroller, grab an S31 dev board now. If you want to build finished projects in MicroPython today, an ESP32-S3, C5 or P4 is still the smarter buy.
The bottom line
The ESP32-S31 won't replace your Raspberry Pi this year. But it is the first ESP32 that runs Linux properly rather than as a party trick, and that's a real milestone for the chips we all love.
The line between "microcontroller" and "tiny computer" is getting blurry. I'll be watching for S31 MicroPython support and will post a hands-on here as soon as it lands.
Would you run Linux on an ESP32, or stick with MicroPython? Let me know: .
Sources
- The newest ESP32 can actually run Linux XDA
- Espressif's new ESP32-S31 Hackaday
- ESP32-S31 development boards unveiled CNX Software
- Linux BSP developer preview for ESP32-S31 CNX Software
- Espressif posts a Linux BSP for the ESP32-S31 Adafruit
- GrieferPig/esp32-s31-linux GitHub
- annoyedmilk/esp32-s31-linux GitHub
- MicroPython downloads micropython.org