Linux nativně na ESP32-S3, bez emulace a rovnou s 9,7″ e-paperem
Linux na ESP32 není úplně nová myšlenka. Už dříve existovaly projekty, které ho na tomto mikrokontroléru spouštěly pomocí emulace jiného procesoru. Tentokrát je ale situace podstatně zajímavější.
Linux 6.11 běží přímo na Xtensa jádru ESP32-S3, bez emulace. A aby samotný terminál na sériové lince nebyl málo, shell se po přihlášení zároveň zrcadlí na 9,7″ e-paperový displej ED097TC2 s rozlišením 1200 × 825 pixelů, připojený přes naši řídicí desku SVERIO PaperBoard EPDiy.
Co je na videích?
První video ukazuje přímo e-paperový displej, na kterém se objevuje výstup shellu: uname -a s kernelem 6.11.0-forkbank, vyhledání Wi-Fi sítí příkazem wifi, připojení k síti a nakonec úspěšný ping svermigo.cz.
Druhé video ukazuje top s linuxovými procesy, kworkery, shelly a síťovou komunikací. To vše na zařízení, kde se dostupná paměť počítá v jednotkách megabajtů. Od resetu k přihlašovacímu promptu se systém dostane přibližně za 14 sekund.
Skutečný Linux na Xtensa
Nejde o linuxové API postavené nad FreeRTOS ani o emulovaný RISC-V nebo ARM procesor. Projekt spouští Linux kernel 6.11 zkompilovaný přímo pro Xtensa ESP32-S3. Verze s e-paperovým terminálem a webovým instalátorem je ve forku svermigo/Linux-on-esp32-S3, což je fork projektu paulneja/Linux-on-esp32-S3.
Nejde přitom jen o kernel a jednoduchý BusyBox. V systému jsou například Bash 5.2, Dash, Nano, GNU Make 4.4, MicroPython 1.26, Lua, cron, nc, socat, HTTP server, Telnet a volitelně SSH přes Dropbear. Funguje Wi-Fi, DHCP, NTP i běžná komunikace po internetu. Vidět root@esp32:~# na mikrokontroléru pořád působí trochu nepatřičně.
Linux bez MMU a experimentální fork()
ESP32-S3 nemá klasickou Memory Management Unit, kterou běžný Linux používá pro virtuální paměť a izolaci procesů. Kernel proto běží v režimu NOMMU. To samo o sobě není novinka, problémem jsou ale některé běžné unixové mechanismy, především fork().
Projekt proto používá experimentální řešení založené na software memory banks. Není to náhrada skutečné MMU (chybí hardwarová izolace paměti i klasické copy-on-write), ale umožňuje oddělit soukromá data procesů natolik, aby fungoval software, který byl na jednodušších NOMMU systémech problematický. Soukromá paměť procesu se při fork() rovnou kopíruje, na jeden fork je limit 512 KiB, backend vyžaduje jednojádrový (UP) Linux a fork z vícevláknového procesu odmítá.
Díky tomu funguje například Bash se subshelly a pipes, GNU Make nebo více procesů v MicroPythonu. Na mikrokontroléru s 8 MB PSRAM je to jedna z nejzajímavějších částí celého projektu.
Dvě jádra, Linux a FreeRTOS vedle sebe
ESP32-S3 má dvě procesorová jádra a projekt je využívá poměrně neobvykle:
- Core 1: Linux
- Core 0: ESP-IDF / FreeRTOS (u varianty s displejem také vykreslování na e-paper)
Jedním z hlavních důvodů je Wi-Fi. Část Wi-Fi stacku Espressifu je dostupná jen jako binární komponenta pro ESP-IDF a nejde ji jednoduše použít jako běžný linuxový ovladač. FreeRTOS proto obstarává nízkoúrovňovou komunikaci s Wi-Fi hardwarem a Linux s ním komunikuje přes sdílenou paměť. Z pohledu Linuxu pak síť funguje přes vlastní rozhraní espsta0. Deska umí být jen klientem, režim přístupového bodu (SoftAP) byl z projektu odstraněn.
16 MB Flash, 8 MB RAM
Referenční konfigurace používá ESP32-S3 N16R8 (16 MB Flash, 8 MB Octal PSRAM). Pro samotný Linux není potřeba SD karta ani další RAM. Tak malé množství paměti ale vyžaduje několik triků: root filesystem je uložen jako read-only CramFS a velká část systému využívá XIP (Execute In Place), takže programy běží přímo z Flash a není nutné všechno kopírovat do RAM. Zapisovatelná data mají vlastní oblasti /etc a /home se souborovým systémem JFFS2.
9,7″ e-paper místo monitoru

Displejová varianta používá řídicí desku SVERIO PaperBoard EPDiy s ESP32-S3 a panel ED097TC2:
- úhlopříčka 9,7″, rozlišení 1200 × 825 px
- 16 odstínů šedi (terminál kreslí černobíle rychlým průběhem DU)
- paralelní rozhraní a podpora EPDiy
Kompletní sadu s panelem, deskou a rámečkem najdete jako SVERIO PaperBoard 9,7″ ED097TC2.
Jak se shell dostane na e-paper
Linux na displej nekreslí přes framebuffer, ten by v 8 MB PSRAM zabral příliš mnoho paměti. Místo toho kernel poskytuje zařízení /dev/epd, které posílá znaky terminálu přes sdílenou paměť na jádro 0. Tam je firmware s upravenou knihovnou EPDiy převede na obraz.
Po přihlášení roota na sériové konzoli se automaticky spustí epd-shell, který přeposílá výstup shellu zároveň do sériového terminálu i na displej. Bootovací hlášky se na e-paper nevypisují, zrcadlení začíná až přihlášením.
- textový terminál 75 × 34 znaků
- posun kurzoru, scrollování, inverzní text a základní escape sekvence (není to plné VT100)
- překreslují se jen změněné řádky
- zrcadlení lze vypnout vytvořením souboru
/etc/paperboard-no-mirror
V reakcích se objevila i otázka, zda by takový displej mohl fungovat jako 60Hz monitor. E-paperové panely se skenují podobnou frekvencí jako LCD, typicky 50 až 120 Hz. Rozdíl je v tom, že jedna změna obrazu trvá několik snímků, než se částice v pixelu přesunou. Že to jde rychle i s e-paperem, ukazuje Modos Paper Monitor s obnovovací frekvencí až 75 Hz, stojí za tím ale FPGA s řadičem, který každý pixel řídí samostatně. Na ESP32-S3 připravuje EPDiy obsah řádků procesorem a jedna změna potřebuje několik průchodů celou plochou, navíc se o jádro 0 dělí vykreslování s Wi-Fi. Proto je tu displej terminálem, který překresluje jen změněné řádky, a ne monitorem.
Flashování přímo z prohlížeče
Vyzkoušet systém nemusí znamenat instalaci toolchainu, kompilaci kernelu ani ruční práci s esptool. K dispozici je ESP32 Linux Web Installer využívající Web Serial, stačí Google Chrome na počítači. Obsahuje dvě varianty:
- Paperboard V3 pro SVERIO PaperBoard v1 s panelem ED097TC2, včetně výstupu terminálu na e-paper
- Headless V1 bez displeje, pro ostatní desky s ESP32-S3 N16R8
Flashuje se celý obraz, takže se přepíše veškerý obsah Flash včetně nastavení a uživatelských souborů. Po flashnutí se systém ovládá přes sériový terminál na 115200 baud (8N1, bez řízení toku). Výchozí přihlášení je root / changeme123. Heslo je veřejné, proto ho hned změňte příkazem passwd, Telnet je totiž ve výchozím stavu zapnutý a hesla posílá v otevřené podobě. Wi-Fi se nastaví příkazem wifi, který vyhledá sítě a zeptá se na heslo.
Kdo nemá vhodný hardware, může si linuxový terminál vyzkoušet i v browserovém simulátoru ESP32.
Nativní Linux vs. emulace RISC-V
Existuje ještě druhý způsob, jak dostat Linux na ESP32: emulovat jiný procesor. Projekt nodestark/esp32-running-linux například emuluje RISC-V CPU, na kterém teprve běží Linux. Je to technicky zajímavé, ale ESP32 musí instrukce virtuálního procesoru interpretovat, což výrazně snižuje výkon. Tady Linux běží nativně: kernel je sestaven přímo pro Xtensa a jeho instrukce vykonává přímo ESP32-S3.
Kde se Linux pro ESP32 vzal?
Současný projekt nevznikl od nuly. Důležitou část práce kolem podpory Linuxu na architektuře Xtensa odvedl Max Filippov (jcmvbkbc). Jeho projekt jcmvbkbc/esp32-linux-build obsahuje build infrastrukturu pro Linux na ESP32 a ESP32-S3. Od něj pochází i samotný kernel (větev xtensa-6.11-esp32 v repozitáři jcmvbkbc/linux-xtensa), upravený Buildroot a firmware esp-hosted, který běží vedle Linuxu na druhém jádru a zprostředkuje mu Wi-Fi.
Projekt paulneja na to navazuje experimentálním fork(), výrazně větším userspace, hardwarovou akcelerací RSA a kompletní build pipeline. Fork svermigo pak přidává e-paperový terminál a webový instalátor. Je tedy lepší ho chápat jako další krok v několikaletém vývoji Linuxu pro Xtensa než jako jednorázový hack.
K čemu je Linux na ESP32?
ESP32-S3 samozřejmě není konkurence pro Raspberry Pi nebo jiné linuxové SBC. Pokud projekt skutečně potřebuje Linux, jednodeskový počítač nabídne víc RAM, MMU, rychlejší úložiště i výrazně vyšší výkon. Tady je zajímavá hlavně technická hranice toho, co jde z mikrokontroléru dostat.
Na zařízení se dvěma Xtensa jádry, 8 MB RAM a 16 MB Flash běží Linux 6.11, Bash, více procesů, MicroPython, GNU Make, Wi-Fi a běžné síťové nástroje. Za zhruba 14 sekund nabootuje do login promptu a svůj shell umí vykreslovat na téměř desetipalcový e-paper. Není to praktická náhrada linuxového počítače, ale je to velmi pěkná ukázka toho, jak daleko se dnes dá ESP32-S3 dotlačit.
Článek původně vyšel na Chiptron.cz. Autor: Svermigo.
Leave a Comment