I'm not gonna be angry at false advertising, but OS attempts only become appropriate to discuss once you made drivers and actually ran stuff on physical hardware
Before that point it's just one of the many dozens and dozens other half-efforted attempts at OS that have been done over and over to death by now
Well, given that it’s built on FreeRTOS, this stuff should be fairly cheap to implement. I think you’re being a little overly critical for an early stage project that fills an interesting niche (GUI OS for MCUs).
> Olimex esp32-p4-pc, the flagship product: new, powerful
That's a very cool board, but pretty tricky. Great idea to run an old Mac OS on it. I try on and off to port the Oberon System 3 to this board since I received it in February. The display already works pretty good, but still a lot of road blocks.
Thanks, I hope I'll be able to get it done in a timely manner. Currently I have to decompose the statically linked inner core because it doesn't fit into the dedicated memory slot anymore. Did you also have issues with the ttyACM0 connection which starts to drop regularly under certain conditions?
It's indeed amazing that these MCUs essentially correspond to or even exceed the performance of the original Ceres systems in the nineties. The Oberon System and also the later AOS/Bluebottle multi core system are particularly suited for today's MCUs because they don't assume an MMU.
Oh, I’m not the developer of this, I just follow these sorts of projects because I’m interested in alternative OSes and particularly OSes that run under constrained environments. I haven’t personally tested it. There’s several of these under development now, as well as many emulators; the ESP CYD (and clones) seems to be a favored target.
Hi, Could you say a few words what makes this board tricky? I've wanted to get one for a similar reason as the OP, although I'm thinking a scheme-like VM with GUI.
There were dozens of pretty complex challenges, too many to describe here. So just a few examples. First of all, I'm fully bare-metal, with no ESP-IDF (though I use it for studying). A major annoyance is the USB-JTAG flapping which is the same on both board copies and different hosts; so debugging is even more difficult; partly worked around by logging via additional TTL UART connection. It's worse right after power-on and after EN pulses, then stabilizes for ~tens of minutes; could be thermal/supply settling, or simply the burst of re-enumerations any reset causes. Then the LT8912B I2C is shared with HDMI DDC; a lot of time went to find the right drive strength so the LT inits with the cable is in. Also a couple of rev v1.0 silicon issues, e.g two-step cache writeback, dead GPSPI clock, etc. For the display, the Olimex demo was very helpful; dumping all DSI/bridge/GDMA/clock registers over JTAG became an important debugging tool. Now the SD card and display work more or less. Right now, I'm really struggling with the USB keyboard, which is a low-speed device behind the onboard FE1.1s hub; both ways of reaching it fail identically with a bare chhltd and no cause bit.
If it's running on MMU-less systems, I'd be interested in how it loads multiple programs into memory: does it need to relocate each program binary? If so, doesn't that preclude using execute-in-place (XIP)?
Generally, running in a MMU without static task config would require relocatable binaries. I'm not sure why it'd preclude execute-in-place. As a relocatable binary should be executable from generally any address space. However I suspect that hardware without an MMU is not super likely to be able to support XIP.
It is based on FreeRTOS, so it should be fairly well documented.
> I suspect that hardware without an MMU is not super likely to be able to support XIP.
This seems strange to me. Don't most microcontrollers support executing directly from flash? Some even can't execute from RAM.
Though I agree with the main point, you can compile code as "PIC" - position independent code, and not bother with (ELF) relocations except for linking.
"COM" programs as seen in MS DOS and earlier CP/M systems contain only relative addresses, and can run from any "segment" of RAM, as the addresses are relative to the value of a segment register. This was used to load "background" services, typically servicing hardware devices.
MCUs with MMUs are starting to appear, such as the ESP32-S31.
> drivers for mouse, keyboard, display, storage and network
and couple lines later
> What you don't have yet, but definitely planned:
> storage (microsd, usb) > network (ethernet, wifi)
I'm not gonna be angry at false advertising, but OS attempts only become appropriate to discuss once you made drivers and actually ran stuff on physical hardware
Before that point it's just one of the many dozens and dozens other half-efforted attempts at OS that have been done over and over to death by now
That's a very cool board, but pretty tricky. Great idea to run an old Mac OS on it. I try on and off to port the Oberon System 3 to this board since I received it in February. The display already works pretty good, but still a lot of road blocks.
It’s amazing how these inexpensive “MCUs” (not even sure you can call them that) are overtaking old PCs now.
It's indeed amazing that these MCUs essentially correspond to or even exceed the performance of the original Ceres systems in the nineties. The Oberon System and also the later AOS/Bluebottle multi core system are particularly suited for today's MCUs because they don't assume an MMU.
It is based on FreeRTOS, so it should be fairly well documented.
This seems strange to me. Don't most microcontrollers support executing directly from flash? Some even can't execute from RAM.
Though I agree with the main point, you can compile code as "PIC" - position independent code, and not bother with (ELF) relocations except for linking.
Yes... I presume they meant XIP for multiple programs at once, since you'd need an MMU for that.
Or PIC code... PalmOS 5 & 6 allowed multiple programs in same memory and they were simply compiled pic. MMU was not used
Some architectures (ARM, RISCV, aarch64) are well suited for this kind of code. Others are extremely poorly suited (x86, MIPS), but all CAN do it
MCUs with MMUs are starting to appear, such as the ESP32-S31.
On the other hand: I have a lot of old hardware in my 'too good to go' garbage bin that can run a full fledged Linux, so what.