\

Linux on ESP32

78 points - last Tuesday at 5:52 PM

Source
  • tyingq

    today at 5:57 PM

    The 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 )

      • Aurornis

        today at 8:37 PM

        > 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.

        Is there another set of comments or history I should be looking at? The only pre-LLM comment is about doing a prototype for something with the old ESP32. That was a common hobby microcontroller introductory project, but there’s a world of difference between playing with an OG ESP32 and porting MMU Linux to a new platform.

        I think we should be honest about what this is: Someone spent their tokens letting an agent attempt bring up of Linux on the platform and it got something to work. I’m appreciative that it was shared. However, given the lack of useful documentation (the key MMU doc is basically empty) and the lack of other explanations, I don’t think we should be reading more into this than as a pure LLM agent proof of concept.

        • ofalkaed

          today at 7:15 PM

          It 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

              today at 8:15 PM

              I 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

                  today at 8:41 PM

                  > 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.

      • Izmaki

        today at 3:02 PM

        Everything is untested or WIP. What is the news here, sorry?

          • jubilanti

            today at 3:11 PM

            The news is: vibe coder vibe coded this and got their agents to upvote it.

              • genericacct

                today at 9:04 PM

                For a worthy goal .. linux on esp would be a game changer for iot imho

                • NooneAtAll3

                  today at 4:09 PM

                  his*

                    • jagged-chisel

                      today at 4:15 PM

                      Is that a critical correction? Is a gender neutral pronoun somehow unacceptable?

          • Aurornis

            today at 4:25 PM

            Obviously 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.

              • voakbasda

                today at 6:19 PM

                Given 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

                    today at 8:55 PM

                    I 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.

                • IgorPartola

                  today at 5:42 PM

                  On the other hand this shows that it is possible and gives a floor for performance.

              • yjftsjthsd-h

                today at 2:49 PM

                > 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

                    today at 3:40 PM

                    What 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

                        today at 8:38 PM

                        it's common to move "unused" code to patches

                • kogasa240p

                  today at 3:41 PM

                  Looks interesting but wouldn't something like netBSD be a better fit?

                    • Joel_Mckay

                      today at 8:26 PM

                      Most 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

                  • Rochus

                    last Wednesday at 12:00 AM

                    How can it run when there is no MMU? Isn't this like rewriting a large part of the kernel?

                      • peterus

                        today at 2:53 PM

                        This 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... And the docs section of the repo: https://github.com/GrieferPig/esp32-s31-linux/tree/main/docs...

                          • Rochus

                            today at 3:54 PM

                            Thanks 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

                                today at 5:43 PM

                                Sv32 is what every 32-bit RISC-V CPU with an MMU uses. It is a full MMU. You can run Linux on it.

                                  • Rochus

                                    today at 6:11 PM

                                    Sure, but what the S31 calls "MMU" is not an Sv32 MMU; therefore my comment.

                                      • Rohansi

                                        today at 6:41 PM

                                        The documentation states:

                                        > Compliant with RISC-V Sv32 virtual memory scheme

                                        https://documentation.espressif.com/esp32-s31_datasheet_en.p...

                                          • Rochus

                                            today at 8:30 PM

                                            Ok, 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-...).

                                            • today at 6:52 PM

                              • chrsw

                                today at 3:58 PM

                                The Microchip PIC32MZ MCU has an MMU as well. But not with wireless options in a 8x8 QFN80 package like this ESP32-S31. That's pretty small. No flash though.

                            • yjftsjthsd-h

                              today at 2:51 PM

                              There is actually precedent for nommu Linux, though it obviously has tradeoffs.

                                • stevefan1999

                                  today at 6:08 PM

                                  Yeah, 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

                                      today at 7:08 PM

                                      You 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?

                          • piterrro

                            today at 5:07 PM

                            When can we run doom on it?

                            • boveyking

                              last Tuesday at 5:52 PM

                              Have a try.