The project is called “Tactility” and its website is https://tactility.one/
You can run ELF binary apps directly from an SD card without restarting or flashing the ROM. There’s an SDK for building these apps, but I haven’t made an official release yet.
I wrote a blog post with some background information: https://bytewelder.com/posts/2025/01/06/tactility-one-year-later.html
Source code and project files: https://github.com/ByteWelder/Tactility
Admittedly, I don’t know a whole lot about what instruction set features the ESP32 actually has, but isn’t an embedded processor that small by nature lacking in things like, say, a memory management unit? Don’t take this the wrong way, but the notion of making a general-purpose OS that relies on cooperative multitasking seems a bit sketchy at a time when you could just spend an extra buck to move up to something like a Raspberry Pi Zero that can run a proper memory-safe and preemptive OS.
There is indeed no way to create new virtual memory mappings. When a binary is loaded, it’s manually mapped into IRAM (instruction RAM).
The target audience for things like Lilygo T-Deck is probably the more technical side of the Flipper Zero audience. I can see how it could also become an end-user device (like Flipper Zero is to many people), but we’ll need more apps for that.
And sure, you could use a Raspberry Pi, but part of the fun/challenge of this project is that it hasn’t been done for ESP32 before (as far as I’m aware). Some differences: a Raspberry Pi draws more power, costs more, and generally doesn’t boot in under 2 seconds. I’m also not aware of compact Pi-based handhelds like the Lilygo T-Deck is to my project. edit: There’s the uConsole, but it’s twice the price, likely has 6+ months delivery time, is much larger, and weighs much more.
Is there a reason you didn’t use the ESP-S3’s MMU? https://docs.espressif.com/projects/esp-idf/en/latest/esp32s3/api-reference/system/mm.html
I didn’t know this exists! I’m currently using a dependency to load ELF files: https://components.espressif.com/components/espressif/elf_loader I guess it would make more sense to have the memory mapping done inside
elf_loader
, so that S3 devices can load to PSRAM and non-S3 devices can load into IRAM. Thanks for the tip!Looking at some of the bug reports it looks like your dependency may already be using the MMU.