I always wanted to develop my own crappy operating system, but the many weird legacy quirks of the x86/PC platform kept me from doing so (e.g. real vs protected mode, only low resolutions available in VGA/VESA, etc.). Now I realized, that maybe one of the many SoCs used in smartphones would be a better platform for developing an operating system as they are all-in-one solutions without downward compability considerations and therefore better design (even though I am not the biggest fan of the ARM instruction set).
Even better: There are many single board computers, which bring SoC, RAM, USB ports for connecting mouse/keyboard and hdmi for connecting a monitor for a cheap price... a perfect platform for dabbeling into OS development I thought...
The most established of the single board computers seems to be the Raspberry Pi and I also found 2 tutorials on OS development for them online (https://hackaday.com/2018/01/19/roll-your-own-raspberry-pi-os/). I thought the tutorials would serve as a nice intro, but actually I was missing a lot of info in the tutorials so I tried to get hold of the official documentation which of there is very little... too little in order to really develop bare metal.
Some issues I ran into:
- there is a peripherals documentation for the raspberry 1, but not for the raspberry 2/3, which have totally different base addresses
- the RB3 for example has a wifi chip (BCM43438), but I can't find any official documentation on how it is connected to the RB3 SoC (BCM2837)
- the tutorials hint at the mailbox concepts for getting a framebuffer/get output via hdmi going, but I can't find any useful information on framebuffer/mailboxes in the official documentation
- same with the boot process... it is nowhere explained in the official documentation
- on the official broadcom website, I can't find the BCM2837 at all!
- when looking at other SoCs like the S905 (in the Odroid C2) it has ethernet directly connected to the SoC (instead of through USB like the RB has), but I can't find any information on how to program it
- besides the framebuffer topic of the tutorials I didn't find any instructions on how to program the GPU (e.g. for 3D rendering). There is a architecture document describing the VisualCore GPU, but not how it has to be interfaced...
Why is the documentation/specification so bad? Is it that the SoCs aren't directly sold to endcustomers and therefore their documentation is confidential? Is it only some SoCs and there are actually some with a proper documentation?