6 ms·
Linux on ESP32
- Rochus 2mo agoHow can it run when there is no MMU? Isn't this like rewriting a large part of the kernel?
- yjftsjthsd-h 2mo agoThere is actually precedent for nommu Linux, though it obviously has tradeoffs.
- stevefan1999 2mo agoYeah, nommu Linux basically cannot run normal ELF since there is no virtual memory which is needed for relative addressing and relocations. You are mostly left with classical formats like AT&T a.out only
- derefr 2mo agoYou wouldn’t be able to guarantee execution of arbitrary ELF, but couldn’t you intentionally build non-PIC-compiled ELF executables where the section base addresses as defined in the header must match the MMU region “slots” the host provides?
- extraduder_ire 2mo agoI can't find it now, but someone ported nommu linux to those cortex-m3 "bluepill" development boards that could be bought for ~$2 (they were built wrong and liquidated for a massive discount). Seeing the title of this submission reminded me of it because I messed around with it a bit a few years ago.
- peterus 2mo agoThis is for the recently released ESP32-S31 which does have a MMU, unlike the ESP32-S3. The author has more details in this reddit post: https://eddrit.com/r/esp32/comments/1vait52/mmu_linux_on_the_new_esp32s31/ https://eddrit.com/r/esp32/comments/1vait52/mmu_linux_on_the... And the docs section of the repo: https://github.com/GrieferPig/esp32-s31-linux/tree/main/docs/s31_hardware https://github.com/GrieferPig/esp32-s31-linux/tree/main/docs...
- Rochus 2mo agoThanks for the links. This doesn't seem to be a true RISC-V MMU (according to the Sv32 specification) integrated into the CPU core itself, but just a peripheral designed for memory mapped SPI flash and PSRAM. So as far as I understand there is no true process isolation with page faults and dynamic paging.
- Rohansi 2mo agoSv32 is what every 32-bit RISC-V CPU with an MMU uses. It is a full MMU. You can run Linux on it.
- Rochus 2mo agoSure, but what the S31 calls "MMU" is not an Sv32 MMU; therefore my comment.
- Rohansi 2mo agoThe documentation states: > Compliant with RISC-V Sv32 virtual memory scheme https://documentation.espressif.com/esp32-s31_datasheet_en.pdf https://documentation.espressif.com/esp32-s31_datasheet_en.p...
- deleted 2mo ago[deleted]
- Rochus 2mo agoOk, I see. The S3’s "MMU" is just an external-memory mapper, not a virtual-memory MMU. The S31 apparently has both, that mapper plus an architectural CPU-side Sv32 MMU; that offers indeed a lot of interesting possibilities. Even sel4 would run on this machine as it seems. The ARM world has no microcontroller with a true MMU as far as I know. Risc-V now has at least two (here is the other one: https://www.bunniestudios.com/blog/2026/baochip-1x-a-mostly-open-22nm-soc-for-high-assurance-applications/ https://www.bunniestudios.com/blog/2026/baochip-1x-a-mostly-...).
- boveyking 2mo agoHave a try.
- Izmaki 2mo agoEverything is untested or WIP. What is the news here, sorry?
- jubilanti 2mo agoThe news is: vibe coder vibe coded this and got their agents to upvote it.
- genericacct 2mo agoFor a worthy goal .. linux on esp would be a game changer for iot imho
- 0x20cowboy 2mo agoWhy would it be a game changer? It seems a heavy hammer for what is actually needed. FreeRTOS itself is already really incredibly fat. (Worthy goal though I agree there. Fun at the minimum.)
- pjmlp 2mo agoFor whom? There are already plenty of POSIX options, and with business friendly licenses.
- NooneAtAll3 2mo ago[flagged]
- jagged-chisel 2mo agoIs that a critical correction? Is a gender neutral pronoun somehow unacceptable?
- NooneAtAll3 2mo agoit's plural
- yjftsjthsd-h 2mo ago> In mainline linux, XIP support on RISC-V was removed, so 6.12 was used instead which has proper XIP support. Doesn't that put it in an awkward position relying on a dead end feature?
- Neywiny 2mo agoWhat I remember was they said it could come back if people needed it but it was broken for looking (months, years) at a time. So even if they didn't remove it, 6.12 might be the last working version with it anyway
- iririririr 2mo agoit's common to move "unused" code to patches
- grieferpig 2mo agoThere are other ports that uses newer kernels (iirc annoyedmilk/esp32-s31-linux used 7.1). XIP saves me RAM, and on a device with 16mib ram I need to squeeze as much ram as possible. Besides I couldn't think of any use cases where you really need a newer kernel
- yjftsjthsd-h 2mo agoI absolutely see the appeal for XIP here! I just have been sufficiently traumatized by Android devices that anything that breaks the ability to follow upstream makes me nervous. I'm sure it's workable here, both because this is a recent enough version that it'll be supported for a long time and because I expect it can be ported forward if really needed. (And of course, at this point it's not like this is a real production thing so as an experiment who cares.)
- kogasa240p 2mo agoLooks interesting but wouldn't something like netBSD be a better fit?
- Joel_Mckay 2mo agoMost ESP chips use FreeRTOS, and flash page caching support in hardware. Unlike Multi-core Application processors which are a better fit for OS like BSD or Linux. =3
- kogasa240p 2mo agoGood to know.
- Aurornis 2mo agoObviously vibecoded but interesting nevertheless. The agent left everything marked as untested in the README but the output snippets toward the bottom imply that it got something working enough to log in and run some commands. Nobody is going to mistake this for a carefully crafted port of Linux but it at least serves as a proof of concept. The real downside of the vibecoding is that we don’t get any helpful information about what it took to get it done with thoughtful analysis from a human. Just a chunk of code in a GitHub repo with some half-coherent README. There’s a docs folder, but the documentation about the MMU part just says that there are two MMUs across a couple lines of notes. Okay, great.
- IgorPartola 2mo agoOn the other hand this shows that it is possible and gives a floor for performance.
- voakbasda 2mo agoGiven the context of a vibe-coded project, would it be reasonable to assume the example outputs are outright hallucinations, without seeing indisputable evidence to the contrary? Sad that’s where my mind goes, but this is what the world has been training me to believe. And these doubts now eclipse the skepticism that I developed toward things that humans posted on the internet. Lies, damn lies, and LLMs.
- Aurornis 2mo agoI don’t think so. I think this is a real result confirmed by a real person. I also think it’s pretty cool. We do need to keep it in context though.
- piterrro 2mo agoWhen can we run doom on it?
- extraduder_ire 2mo agoOn linux on an esp32? Doubtful that would even work. There have been esp32 ports of doom for a decade though. Here's a current one: https://github.com/AmirhoseinMasoumi/ESP32-DOOM https://github.com/AmirhoseinMasoumi/ESP32-DOOM
- tyingq 2mo agoThe responses all seem a little harsh. If you poke through the user's history, this kind of thing isn't new for them, going back to pre-LLM-could-do-this days. I think the docs are light because the primary goal for them is not to provide everyone with a well documented linux on esp-32-s31 guide, but rather this that they shared: "I'm currently working on a hackable music player and I used to prototype with the OG esp32, and tbh if I wasn't for Bluetooth audio I'd move on to S3 already" ( from the links in this comment https://news.ycombinator.com/item?id=49134987 https://news.ycombinator.com/item?id=49134987 )
- ofalkaed 2mo agoIt takes no effort to play LLM or not, you don't need to know anything about the topic or put anytime into reading and understanding the submission, just find that em-dash and you can turn every discussion into meta slop.
- tyingq 2mo agoI also think an LLM isn't going to just spit this all out and viola, it boots. I imagine there were many rounds of jtag debug, copy/paste into the LLM prompt, with enough human knowledge/context to say the right thing, suggest some existing implementation snippet, etc.
- Aurornis 2mo ago> I imagine there were many rounds of jtag debug, copy/paste into the LLM prompt You may not be familiar with modern LLM tools. You don’t need to copy/paste anything. You can easily instruct your agent to access the serial port and JTAG debugger and it will easily handle it through subsessions. The tools have moved rapidly this year. Something like this is entirely doable by attaching the right cables, telling the agent where to access everything, and then keeping it fed with enough tokens to keep going. There are some amazing projects doing reverse engineering or porting to micros fully automated. The results are still full of typical LLM output problems, but it’s amazing what can be brute forced with enough tokens in an LLM loop. When I’m evaluating MCU platforms for new projects I’ll some times set an LLM loose on each to get a proof of concept running so I can do benchmarks or testing. It can save a lot of time finding showstoppers or roadblocks before I waste a lot of time on doing the problem correctly.
- fitsumbelay 2mo agoThe responses to agent-aided dev seem a little over the top to me. The derisive "vibe-coded" label is one thing, but the least compelling argument or complaint of them all is the truly worn out one about barriers to entry that you and I and so many others worked soooo hard to climb over are now being obliterated, allowing any casual Moe to stroll into your domain. How many professionals -- djs, photographers ... hell, SEO experts -- pretty much anyone technical and possibly creative have watched technology make work and the accumulation of competitors almost too easy. If you just remember that no one in this time-space or anyother AFAICT is forcing you to consume or even read about projects like this, you'll find life goes on and you're actually still an expert who people who need experts will value materially (which should be your thing, otherwise wth are you complaining about?) In fact, if you keep your mind open you might -- not definitely but _just_ _might_ -- find a piece of something useful amidst the slop. One fellow's trash ...
- biosboiii 2mo ago>Espressif's radio firmware blobs are closed source, and must run within ESP-IDF's FreeRTOS framework. It's near impossible to reverse-engineer them (not to mention legal risks.) It's not nearly impossible, it has already been done :) Slides: https://fahrplan.events.ccc.de/congress/2024/fahrplan/media/38c3/submissions/C38ZK7/resources/38c3-final_vyLLS62.pdf https://fahrplan.events.ccc.de/congress/2024/fahrplan/media/... Video: https://www.youtube.com/watch?v=r8IqkUTGjlA https://www.youtube.com/watch?v=r8IqkUTGjlA
- grieferpig 2mo agoIt is for the older original esp32, not for this port which is esp32-s31. Their radio are drastically different. Also their reverse engineered firmware are incomplete so esp-hosted remains the best choice for now.
- grieferpig 2mo agoAuthor here, few things to clarify: - Yes it is vibe coded. It do work on real S31 dev boards (there's console output and binary releases to prove that.) I understand the esp32 microcontroller architecture to some extent, but I barely know how to port Linux to other RISC-V platforms; what I did is to tell the agent something like "Go implement an IPC transport that uses a shared SRAM buffer and an IPC interrupt doorbell" or "sdmmc uses designware ip; search esp-idf usage and port the existing Linux driver over." An AI agent on its own would never discover S31's bespoke hardware behavior without my guidance, for example, that the register `mcliccfg` has writable bits, despite esp-idf saying otherwise. However I admit that AI assistance is the direct reason why I am able to progress this fast, and I did learn a lot about kernel development during the process. If you're bothered by AI code, move on. - Untested is a bit misleading: per the README, means "seems working; not thoroughly tested." They do seem to work at the time when their drivers are being built. Three weeks into this project I can't have everything stress-tested already. - I built this more as a proof of concept intending for my own use; I did not expect it to gain popularity anytime soon, so the docs are very bad for now.