• ValdikSS 2 days ago

    In case anyone interested, you can run (nommu) Linux on ESP32 Xtensa boards

    https://github.com/jcmvbkbc/esp32-linux-build

    ESP32-S3 N16R8 is <$5 on aliexpress:

        - Dual-core Xtensa 240 MHz
        - 16 MB NOR flash (eXecute-in-place supported)
        - 8 MB (PS)RAM
        - Wi-Fi 2.4 GHz 802.11n, Bluetooth
    
    As well as Zephyr, NuttX RTOSes, MicroPython.
    • no_time 2 days ago

      >eXecute-in-place supported

      Losing this when you load ELFs is kind of a bummer. Probably a dumb question but I wonder if it'd be possible to only swap in the parts of the binary that are needed at any given time.

      • ValdikSS a day ago

        swap requires MMU, so no, unfortunately. But there are tricks to have XIP userspace: cramfs supports it, as well as a special AXFS file system.

        cramfs parses ELF files and marks XIP only a .text/ro segments of it, not the whole file.

        https://github.com/npitre/cramfs-tools/commit/2325ed2de8fd17...

        • actionfromafar a day ago

          Historically, Unix SVR7 and Minix had swap with no MMU. But Linux can't do it.

      • artemonster 2 days ago

        What is your username?

      • uecker 2 days ago

        Cool! And I do think the world needs more C compilers. There is so much you could do with this language, but it needs to be disentangled from the C++ compiler behemoths. (yes, I now that there are other small C compilers)

        • isitcontent 2 days ago

          There is the TCC. Adapting that would probably be a faster path to a full featured C compiler on esp32 than building up my xcc700. This is more of an educational sandbox project.

          • uecker 2 days ago

            I know, and there are chibicc, kefir, etc. .. and I have my own experimental C compiler.

            • fuhsnn 2 days ago

              I would love to see how you handle variably-modified types, the way I retrofitted them onto chibicc never felt quite right, and I've never seen another non-gcc/clang compiler fully support noplate's VM type patterns.

              • uecker 2 days ago

                Maybe I fill find the time to clean it up and make it public. But did not find VM-types difficult to implement, the type just depends on some run-time value, so at the point in time where the size expression is evaluated, one stores the result in a hidden variable which the type refers to.

                • fuhsnn 2 days ago

                  Looking forward to the release!

                  What I found troublesome were not really the caching of array count, but when and where should the side effect be represented in AST, for example this one: https://godbolt.org/z/rcT1d8WWe the puts() call is a side effect for automatic variable but completely ignored for static variable.

                  • uecker a day ago

                    Yes, it is a bit of mess. We started to make this more precise in the C standard when those expression have to be evaluated, but there are still issues. And when this is involved extensions there are more issues. I think in this example, such initializer would not be allowed in ISO C. I also fixed many bugs in GCC .

          • pjmlp 2 days ago

            What we need is safety improvements in C, we already have enough security exploits in the standard library, strings and arrays, no need for more, without fixing what is broken since 1979 (lint birth year).

            • uecker a day ago

              I am looking forward to your contributions.

              • pjmlp a day ago

                I have been contributing with C++ code since 1993, with bounded checked collection types in release code, and compiled managed languages since mid 2000's.

                Even Dennis Ritchie and Ken Thompson themselves, went on with Alef, Limbo and Go.

                I have been contributing by reducing my C, and C++ footprint on the planet, and security enforcement at various assignments.

                • uecker a day ago

                  These do not seem to be the safety improvements for C that you requested.

                  • pjmlp a day ago

                    They do, by decreasing the dependency on C, and the lack of interest WG14 shows in improving C.

                    It is like gardening, slowly taking away all the paths bad weeds are still able to spoil the garden.

                    We might not remove all of them, however if they are only able to thrive on a little gardner corner surrouned by sand is already an improvement.

                    • uecker a day ago

                      As I said before, insulting volunteers and also misrepresenting what is in the power of an ISO group of experts is bad style IMHO, but I also think you are misguided in thinking that moving away from C towards more complexity is good. My own IT security and sovereignty is more harmed than helped by this trend.

                      • pjmlp 20 hours ago

                        Volunteers follow a charter set up by ISO, The C Standard charter, and definitely WG14 has not had security on C for quite some time.

                        I recall for the audience, that enable secure programming, and enable functional safety are two of such goals.

                        Nonetheless, other than some UB improvements has been business as usual.

                        If it is insulting to point out what isn't being achieved, then so be it.

                        As for volunteers, my point regarding WG14 and WG21 is that compiler vendors are the ones that should be part of ISO, and if they don't see any value in that, maybe it is about time to ramp down the whole effort, and finally replace them.

                        • uecker 13 hours ago

                          The charter is not set by ISO. It also has security on it since C11 and was rewritten for C2Y with security also mentioned explicitly. Compiler vendors are active as part of ISO, but the reality is simply that the open-source compilers are also massively underfunded. It is the general maintenance problem that we now have everywhere in IT. One can argue that activities that are not of enough interest should be ramped down, but then the conclusion is that only new things have a right to exist, and everything has to be rewritten all the time because it has to be ramped down the moment industry loses interest and maintenance become a problem. Somehow I doubt this would be an improvement.

          • boznz 2 days ago

            Cool, always refreshing to see different approaches to the same problem, and you learn so much by doing, this is more the kind of tinkering I will be doing in retirement.

            • saidnooneever 2 days ago

              hats off. this is really easy to read and well written and easy to comprehend code imho because it only support basic features. its a really nice example to read through thanks. nice inspiration to see its possible to roll your own for this with a bit restricted featureset and goals :).

            • ladyanita22 2 days ago

              That's super cool! I have been wondering what could be done with ESP32 if it weren't for the lack of RAM.

              As a fun of Rust, one thing that saddens me is knowing these things would be difficult to achieve with a Rust compiler, given the language seems to be vastly more complex.

              Unless someone created a subset of Rust without (some?) safety checks, I guess.

              • isitcontent 2 days ago

                Right, Rust is more complex, and it is the complex bits that make it Rust. There are sure some shortcuts possible for starters, for example scope-based lifetimes like in early Rust versions, but still, to make it a worthwhile upgrade over C, it would take some intermediate representation, and definitely more than 700 lines.

                There is a lively movement for coding in Rust for esp32, that works, just not on the device I think.

                • apitman 2 days ago

                  I would love to see something like C with a borrow checker and Result/Option but not the fancy type system.

                  • jacquesm 2 days ago

                    The big question is whether or not that is even possible. My money is on 'no'.

                • pjmlp 2 days ago

                  Everything that was possible on PCs with MS-DOS.

                  I think people have no clue how powerful ESP 32 actually is.

                  https://en.wikipedia.org/wiki/Amstrad_PC1512

                • MobiusHorizons 2 days ago

                  Very cool! What was the shell you are running in the demo video?

                  • isitcontent 2 days ago

                    Thanks! That is just my small custom experimental mini shell. This project started as a retro DOS-like cyberdeck, and first thing I tried to run there was DOS programs, which is why it looks like that. Only got to COM files, when I learned about elf_loader, so I now focus on that. I might extract and release whatever is valuable/reusable in that shell later on.

                    • MobiusHorizons 2 days ago

                      Yeah, very cool. I was thinking about possibly porting it to risc-v and using it on my fpga based core. I was trying to build a monitor style shell, but C like environment would be very cool.

                      • isitcontent 2 days ago

                        Porting to different CPU/bytecodes should be doable. Just keep in mind that in ESP-IDF we also get the dynamic linker and the libc for free (and any other C functions exposed in the firmware). On the other platforms, that may be some extra work for the compiler.

                        • MobiusHorizons 2 days ago

                          Yea I was understanding that hurdle, but thanks for the reminder.

                      • guestbest 2 days ago

                        Thanks for posting this here. I star’d the project. Getting a portable computer with a minimal flexible and previously well supported operating system was one of my goals for the esp32 as well. I’ll be watching for more.

                    • nunobrito 2 days ago

                      Can this run ELF programs that are placed on the memory card?

                      • isitcontent 2 days ago

                        I only wrote the compiler. But ESP-IDF elf_loader component can do that, yes.