Repository navigation
Releases: annoyedmilk/esp32-s31-linux
Release list
v0.3.1
Linux 7.2 on the ESP32-S31-Korvo-1, ready to flash.
Files
| File | Use |
|---|---|
esp32s31-linux-*-flash.zip |
Flash images. flash.bin goes to offset 0. FLASH.txt tells how. |
esp32s31-linux-*-sdcard.img.xz |
microSD card image: FAT for your files and the ext4 root. |
SHA256SUMS |
Checksums of the two files. |
Quick start
pip install "esptool>=5.4"- Connect the UART Type-C port of the board.
esptool --chip esp32s31 -p PORT -b 921600 write-flash 0x0 flash.bin- Write the card image to a microSD card (all data on the card is lost),
for example with balenaEtcher. Put the card into the board. - Open the console on the same port at 115200 baud, and push the reset
button. The board logs in as root. - Wi-Fi:
wpa_passphrase "<ssid>" "<passphrase>" >> /etc/wpa_supplicant.conf,
then/etc/init.d/S40wifi restart.
The LCD shows the Tux logo, the kernel warnings and a login. A USB keyboard
works on it.
New in v0.3.1
- Bluetooth:
hci0with BR/EDR and LE through the ESP-Hosted firmware on
hart 0.bluetoothd,bluetoothctl,hciconfigandhcitoolare on
the card. - IEEE 802.15.4: an OpenThread radio co-processor. Its Spinel stream is
/dev/esp_rcp0, for a Thread host such asot-daemon(not on the card). - The kernel log no longer shows a Wi-Fi error every 300 s. The OBSS scan
ofwpa_supplicantnow runs. - The ESP-Hosted driver is built into the kernel. The kernel has no module
support. /bin/shis BusyBox ash, which needs less memory for the boot scripts.
The login shell stays bash.- Swap goes first to 6 MiB of LZ4-compressed RAM, then to the swap file on
the card. - The userspace uses the Zba, Zbb and Zbs instructions of the CPU.
- A boot after a reset checks a dirty FAT partition, so the kernel does
not warn about it. - The boot is quieter and faster: no PSRAM test, and the consoles show
only warnings and errors. - OpenSBI 1.9 and the current ESP-Hosted. OpenSBI moved to
0x50F00000.
Wi-Fi gives approximately 35 to 38 Mbit/s in each direction (v0.3.0: 46
TX, 41 to 43 RX): the radios take SRAM from the Wi-Fi buffers. The
firmware turns the Wi-Fi/802.15.4 coexistence off, so a Thread network can
lose frames while Wi-Fi is busy.
v0.3.1 needs the new flash.bin and the new card image together. A v0.3.0
card loads the Wi-Fi driver as a module, which v0.3.1 does not have.
New in v0.3.0
- Wi-Fi is now ESP-Hosted from Espressif. The ESP-Hosted firmware runs on
hart 0, and Linux loads its host driver as the moduleesp32_shm. The
two sides use a shared-memory transport. The own Wi-Fi driver and its
firmware of v0.2.x are gone. wpa_supplicanton Linux runs the authentication and the key handshakes
(WPA2 and WPA3-SAE).hostapdis on the card and starts an access point.- Wi-Fi is faster: approximately 46 Mbit/s TX and 41 to 43 Mbit/s RX with
iperf3 TCP (v0.2.2: 39 and 46 Mbit/s). - Linux 7.2.10 and ESP-IDF v6.1 (before: Linux 7.2.9 and a development
version of ESP-IDF). - A program starts faster the first time after a file change: Linux syncs
the caches only for the new code page, not for the full caches. fastfetchshows the system, the kernel, the memory and the network.
v0.3.0 needs the new flash.bin and the new card image together. A v0.2.x
card does not have the Wi-Fi module, and the v0.3.0 card does not work
with a v0.2.x flash.bin.
Fixed in v0.2.2
- A program that writes machine code and then runs it could run the old
code: for example a JIT, or a breakpoint thatgdbserversets. The
fence.iinstruction does not clear the instruction cache of this chip,
so the old code stayed in it for up to one timer tick. Now OpenSBI clears
the instruction cache when Linux makes new code visible. v0.1.0 to v0.2.1
have this fault.
From v0.2.0 or v0.2.1, flash flash.bin only. The card image has no change.
Fixed in v0.2.1
- The board did not start in about 2% of the boots. The log stopped after
hart 0 resident, and only the reset button helped. v0.1.0 and v0.2.0
have this fault. The cause was the sequence in which OpenSBI sets the
memory permissions of the chip. - The start of the Linux hart wrote into memory of the Wi-Fi firmware. That
memory is now reserved.
From v0.2.0, flash flash.bin only. The card image has no change.
New since v0.1.0
- Linux 7.2.9 and a newer ESP-IDF, with a fix in the PHY library.
- Linux is 2 to 10 times faster with the LCD. The frame buffer is now
uncached, so the other memory can use the cache in write-back mode. The
boot to the login is also faster. - Linux has 264 KiB more memory. Kernel parts that nothing on the board
uses are off. - More tools:
htop,curl,file, and the BusyBox web server (httpd).
scpandsftpfrom a computer now work, because the image has an SFTP
server. - The GPIO tools work. They are now from libgpiod 2 (
gpioget -c gpiochip0 PIN), because the kernel has only version 2 of the GPIO interface. - A login message lists the first commands. The shell has a prompt with the
directory, and its history stays after a reset. - The board runs
/mnt/sd/autostart.shat each boot, if that file exists. - Examples in
/usr/share/examples: the RGB LED from MicroPython, a GPIO
script, and a web page that sets the LED. - Without a card, there is a recovery shell on the LCD also, for a USB
keyboard. Ctrl-C works in it. fsck.fatis in the image. It clears the "not properly unmounted" flag
of the FAT partition. The README tells how.docs/internals.mddescribes the two ways to get uncached access to
PSRAM.
The recovery shell on the LCD and fsck.fat are from Platima.
To update from v0.1.0, flash flash.bin and write the new card image. The
card image erases the card, so save your files from the FAT partition first.
Known limits
- The board and chip revision v0.0 are the only tested hardware.
- One hart runs Linux. The other runs the Wi-Fi firmware.
- Floating point works in software; the hardware FPU is not used.
- No I2C, audio or camera driver.
poweroffstops the CPU. It does not remove power.
See the README for the full list, and docs/internals.md for the details.
v0.3.0
Linux 7.2 on the ESP32-S31-Korvo-1, ready to flash.
Files
| File | Use |
|---|---|
esp32s31-linux-*-flash.zip |
Flash images. flash.bin goes to offset 0. FLASH.txt tells how. |
esp32s31-linux-*-sdcard.img.xz |
microSD card image: FAT for your files and the ext4 root. |
SHA256SUMS |
Checksums of the two files. |
Quick start
pip install "esptool>=5.4"- Connect the UART Type-C port of the board.
esptool --chip esp32s31 -p PORT -b 921600 write-flash 0x0 flash.bin- Write the card image to a microSD card (all data on the card is lost),
for example with balenaEtcher. Put the card into the board. - Open the console on the same port at 115200 baud, and push the reset
button. The board logs in as root. - Wi-Fi:
wpa_passphrase "<ssid>" "<passphrase>" >> /etc/wpa_supplicant.conf,
then/etc/init.d/S40wifi restart.
The LCD shows the kernel log and a login. A USB keyboard works on it.
New in v0.3.0
- Wi-Fi is now ESP-Hosted from Espressif. The ESP-Hosted firmware runs on
hart 0, and Linux loads its host driver as the moduleesp32_shm. The
two sides use a shared-memory transport. The own Wi-Fi driver and its
firmware of v0.2.x are gone. wpa_supplicanton Linux runs the authentication and the key handshakes
(WPA2 and WPA3-SAE).hostapdis on the card and starts an access point.- Wi-Fi is faster: approximately 46 Mbit/s TX and 41 to 43 Mbit/s RX with
iperf3 TCP (v0.2.2: 39 and 46 Mbit/s). - Linux 7.2.10 and ESP-IDF v6.1 (before: Linux 7.2.9 and a development
version of ESP-IDF). - A program starts faster the first time after a file change: Linux syncs
the caches only for the new code page, not for the full caches. fastfetchshows the system, the kernel, the memory and the network.
v0.3.0 needs the new flash.bin and the new card image together. A v0.2.x
card does not have the Wi-Fi module, and the v0.3.0 card does not work
with a v0.2.x flash.bin.
Fixed in v0.2.2
- A program that writes machine code and then runs it could run the old
code: for example a JIT, or a breakpoint thatgdbserversets. The
fence.iinstruction does not clear the instruction cache of this chip,
so the old code stayed in it for up to one timer tick. Now OpenSBI clears
the instruction cache when Linux makes new code visible. v0.1.0 to v0.2.1
have this fault.
From v0.2.0 or v0.2.1, flash flash.bin only. The card image has no change.
Fixed in v0.2.1
- The board did not start in about 2% of the boots. The log stopped after
hart 0 resident, and only the reset button helped. v0.1.0 and v0.2.0
have this fault. The cause was the sequence in which OpenSBI sets the
memory permissions of the chip. - The start of the Linux hart wrote into memory of the Wi-Fi firmware. That
memory is now reserved.
From v0.2.0, flash flash.bin only. The card image has no change.
New since v0.1.0
- Linux 7.2.9 and a newer ESP-IDF, with a fix in the PHY library.
- Linux is 2 to 10 times faster with the LCD. The frame buffer is now
uncached, so the other memory can use the cache in write-back mode. The
boot to the login is also faster. - Linux has 264 KiB more memory. Kernel parts that nothing on the board
uses are off. - More tools:
htop,curl,file, and the BusyBox web server (httpd).
scpandsftpfrom a computer now work, because the image has an SFTP
server. - The GPIO tools work. They are now from libgpiod 2 (
gpioget -c gpiochip0 PIN), because the kernel has only version 2 of the GPIO interface. - A login message lists the first commands. The shell has a prompt with the
directory, and its history stays after a reset. - The board runs
/mnt/sd/autostart.shat each boot, if that file exists. - Examples in
/usr/share/examples: the RGB LED from MicroPython, a GPIO
script, and a web page that sets the LED. - Without a card, there is a recovery shell on the LCD also, for a USB
keyboard. Ctrl-C works in it. fsck.fatis in the image. It clears the "not properly unmounted" flag
of the FAT partition. The README tells how.docs/internals.mddescribes the two ways to get uncached access to
PSRAM.
The recovery shell on the LCD and fsck.fat are from Platima.
To update from v0.1.0, flash flash.bin and write the new card image. The
card image erases the card, so save your files from the FAT partition first.
Known limits
- The board and chip revision v0.0 are the only tested hardware.
- One hart runs Linux. The other runs the Wi-Fi firmware.
- Floating point works in software; the hardware FPU is not used.
- No I2C, audio or camera driver.
poweroffstops the CPU. It does not remove power.
See the README for the full list, and docs/internals.md for the details.
v0.2.2
Linux 7.2 on the ESP32-S31-Korvo-1, ready to flash.
Files
| File | Use |
|---|---|
esp32s31-linux-*-flash.zip |
Flash images. flash.bin goes to offset 0. FLASH.txt tells how. |
esp32s31-linux-*-sdcard.img.xz |
microSD card image: FAT for your files and the ext4 root. |
SHA256SUMS |
Checksums of the two files. |
Quick start
pip install "esptool>=5.4"- Connect the UART Type-C port of the board.
esptool --chip esp32s31 -p PORT -b 921600 write-flash 0x0 flash.bin- Write the card image to a microSD card (all data on the card is lost),
for example with balenaEtcher. Put the card into the board. - Open the console on the same port at 115200 baud, and push the reset
button. The board logs in as root. - Wi-Fi:
wpa_passphrase "<ssid>" "<passphrase>" >> /etc/wpa_supplicant.conf,
then/etc/init.d/S40wifi restart.
The LCD shows the kernel log and a login. A USB keyboard works on it.
Fixed in v0.2.2
- A program that writes machine code and then runs it could run the old
code: for example a JIT, or a breakpoint thatgdbserversets. The
fence.iinstruction does not clear the instruction cache of this chip,
so the old code stayed in it for up to one timer tick. Now OpenSBI clears
the instruction cache when Linux makes new code visible. v0.1.0 to v0.2.1
have this fault.
From v0.2.0 or v0.2.1, flash flash.bin only. The card image has no change.
Fixed in v0.2.1
- The board did not start in about 2% of the boots. The log stopped after
hart 0 resident, and only the reset button helped. v0.1.0 and v0.2.0
have this fault. The cause was the sequence in which OpenSBI sets the
memory permissions of the chip. - The start of the Linux hart wrote into memory of the Wi-Fi firmware. That
memory is now reserved.
From v0.2.0, flash flash.bin only. The card image has no change.
New since v0.1.0
- Linux 7.2.9 and a newer ESP-IDF, with a fix in the PHY library.
- Linux is 2 to 10 times faster with the LCD. The frame buffer is now
uncached, so the other memory can use the cache in write-back mode. The
boot to the login is also faster. - Linux has 264 KiB more memory. Kernel parts that nothing on the board
uses are off. - More tools:
htop,curl,file, and the BusyBox web server (httpd).
scpandsftpfrom a computer now work, because the image has an SFTP
server. - The GPIO tools work. They are now from libgpiod 2 (
gpioget -c gpiochip0 PIN), because the kernel has only version 2 of the GPIO interface. - A login message lists the first commands. The shell has a prompt with the
directory, and its history stays after a reset. - The board runs
/mnt/sd/autostart.shat each boot, if that file exists. - Examples in
/usr/share/examples: the RGB LED from MicroPython, a GPIO
script, and a web page that sets the LED. - Without a card, there is a recovery shell on the LCD also, for a USB
keyboard. Ctrl-C works in it. fsck.fatis in the image. It clears the "not properly unmounted" flag
of the FAT partition. The README tells how.docs/internals.mddescribes the two ways to get uncached access to
PSRAM.
The recovery shell on the LCD and fsck.fat are from Platima.
To update from v0.1.0, flash flash.bin and write the new card image. The
card image erases the card, so save your files from the FAT partition first.
Known limits
- The board and chip revision v0.0 are the only tested hardware.
- One hart runs Linux. The other runs the Wi-Fi firmware.
- Floating point works in software; the hardware FPU is not used.
- No I2C, audio or camera driver.
poweroffstops the CPU. It does not remove power.
See the README for the full list, and docs/internals.md for the details.
v0.2.1
Linux 7.2 on the ESP32-S31-Korvo-1, ready to flash.
Files
| File | Use |
|---|---|
esp32s31-linux-*-flash.zip |
Flash images. flash.bin goes to offset 0. FLASH.txt tells how. |
esp32s31-linux-*-sdcard.img.xz |
microSD card image: FAT for your files and the ext4 root. |
SHA256SUMS |
Checksums of the two files. |
Quick start
pip install "esptool>=5.4"- Connect the UART Type-C port of the board.
esptool --chip esp32s31 -p PORT -b 921600 write-flash 0x0 flash.bin- Write the card image to a microSD card (all data on the card is lost),
for example with balenaEtcher. Put the card into the board. - Open the console on the same port at 115200 baud, and push the reset
button. The board logs in as root. - Wi-Fi:
wpa_passphrase "<ssid>" "<passphrase>" >> /etc/wpa_supplicant.conf,
then/etc/init.d/S40wifi restart.
The LCD shows the kernel log and a login. A USB keyboard works on it.
Fixed in v0.2.1
- The board did not start in about 2% of the boots. The log stopped after
hart 0 resident, and only the reset button helped. v0.1.0 and v0.2.0
have this fault. The cause was the sequence in which OpenSBI sets the
memory permissions of the chip. - The start of the Linux hart wrote into memory of the Wi-Fi firmware. That
memory is now reserved.
From v0.2.0, flash flash.bin only. The card image has no change.
New since v0.1.0
- Linux 7.2.9 and a newer ESP-IDF, with a fix in the PHY library.
- Linux is 2 to 10 times faster with the LCD. The frame buffer is now
uncached, so the other memory can use the cache in write-back mode. The
boot to the login is also faster. - Linux has 264 KiB more memory. Kernel parts that nothing on the board
uses are off. - More tools:
htop,curl,file, and the BusyBox web server (httpd).
scpandsftpfrom a computer now work, because the image has an SFTP
server. - The GPIO tools work. They are now from libgpiod 2 (
gpioget -c gpiochip0 PIN), because the kernel has only version 2 of the GPIO interface. - A login message lists the first commands. The shell has a prompt with the
directory, and its history stays after a reset. - The board runs
/mnt/sd/autostart.shat each boot, if that file exists. - Examples in
/usr/share/examples: the RGB LED from MicroPython, a GPIO
script, and a web page that sets the LED. - Without a card, there is a recovery shell on the LCD also, for a USB
keyboard. Ctrl-C works in it. fsck.fatis in the image. It clears the "not properly unmounted" flag
of the FAT partition. The README tells how.docs/internals.mddescribes the two ways to get uncached access to
PSRAM.
The recovery shell on the LCD and fsck.fat are from Platima.
To update from v0.1.0, flash flash.bin and write the new card image. The
card image erases the card, so save your files from the FAT partition first.
Known limits
- The board and chip revision v0.0 are the only tested hardware.
- One hart runs Linux. The other runs the Wi-Fi firmware.
- Floating point works in software; the hardware FPU is not used.
- No I2C, audio or camera driver.
poweroffstops the CPU. It does not remove power.
See the README for the full list, and docs/internals.md for the details.
v0.2.0
Linux 7.2 on the ESP32-S31-Korvo-1, ready to flash.
Files
| File | Use |
|---|---|
esp32s31-linux-*-flash.zip |
Flash images. flash.bin goes to offset 0. FLASH.txt tells how. |
esp32s31-linux-*-sdcard.img.xz |
microSD card image: FAT for your files and the ext4 root. |
SHA256SUMS |
Checksums of the two files. |
Quick start
pip install "esptool>=5.4"- Connect the UART Type-C port of the board.
esptool --chip esp32s31 -p PORT -b 921600 write-flash 0x0 flash.bin- Write the card image to a microSD card (all data on the card is lost),
for example with balenaEtcher. Put the card into the board. - Open the console on the same port at 115200 baud, and push the reset
button. The board logs in as root. - Wi-Fi:
wpa_passphrase "<ssid>" "<passphrase>" >> /etc/wpa_supplicant.conf,
then/etc/init.d/S40wifi restart.
The LCD shows the kernel log and a login. A USB keyboard works on it.
New since v0.1.0
- Linux 7.2.9 and a newer ESP-IDF, with a fix in the PHY library.
- Linux is 2 to 10 times faster with the LCD. The frame buffer is now
uncached, so the other memory can use the cache in write-back mode. The
boot to the login is also faster. - Linux has 264 KiB more memory. Kernel parts that nothing on the board
uses are off. - More tools:
htop,curl,file, and the BusyBox web server (httpd).
scpandsftpfrom a computer now work, because the image has an SFTP
server. - The GPIO tools work. They are now from libgpiod 2 (
gpioget -c gpiochip0 PIN), because the kernel has only version 2 of the GPIO interface. - A login message lists the first commands. The shell has a prompt with the
directory, and its history stays after a reset. - The board runs
/mnt/sd/autostart.shat each boot, if that file exists. - Examples in
/usr/share/examples: the RGB LED from MicroPython, a GPIO
script, and a web page that sets the LED. - Without a card, there is a recovery shell on the LCD also, for a USB
keyboard. Ctrl-C works in it. fsck.fatis in the image. It clears the "not properly unmounted" flag
of the FAT partition. The README tells how.docs/internals.mddescribes the two ways to get uncached access to
PSRAM.
The recovery shell on the LCD and fsck.fat are from Platima.
To update, flash flash.bin and write the new card image. The card image
erases the card, so save your files from the FAT partition first.
Known limits
- The board and chip revision v0.0 are the only tested hardware.
- One hart runs Linux. The other runs the Wi-Fi firmware.
- Floating point works in software; the hardware FPU is not used.
- No I2C, audio or camera driver.
poweroffstops the CPU. It does not remove power.
See the README for the full list, and docs/internals.md for the details.
v0.1.0
Linux 7.2 on the ESP32-S31-Korvo-1, ready to flash.
Files
| File | Use |
|---|---|
esp32s31-linux-*-flash.zip |
Flash images. flash.bin goes to offset 0. FLASH.txt tells how. |
esp32s31-linux-*-sdcard.img.xz |
microSD card image: FAT for your files and the ext4 root. |
SHA256SUMS |
Checksums of the two files. |
Quick start
pip install "esptool>=5.4"- Connect the UART Type-C port of the board.
esptool --chip esp32s31 -p PORT -b 921600 write-flash 0x0 flash.bin- Write the card image to a microSD card (all data on the card is lost),
for example with balenaEtcher. Put the card into the board. - Open the console on the same port at 115200 baud, and push the reset
button. The board logs in as root. - Wi-Fi:
wpa_passphrase "<ssid>" "<passphrase>" >> /etc/wpa_supplicant.conf,
then/etc/init.d/S40wifi restart.
The LCD shows the kernel log and a login. A USB keyboard works on it.
Known limits
- The board and chip revision v0.0 are the only tested hardware.
- One hart runs Linux. The other runs the Wi-Fi firmware.
- Floating point works in software; the hardware FPU is not used.
- No I2C, audio or camera driver.
poweroffstops the CPU. It does not remove power.
See the README for the full list, and docs/internals.md for the details.