This is something I'm very interested in, and nearly bought a Pi today; I want a board that I can learn ARM assembly and C on to build a toy OS. I built half of a tiny kernel on X86 (woo real-mode!) nearly a decade ago, so I know a tiny bit about it all, but I'd assumed the Pi was a great target: well priced, tonnes of them out there so hopefully well documented, etc.
What would you suggest instead? I'm considering just firing up QEMU and it's ARM baseboard target then dealing with porting to real hardware later, but there's something exciting about seeing a real circuit firing up your kernel that makes me smile.
I had to deal with them before, so if you can, stay away from cheap Chinese boards or hackable routers. When you're just learning, it's not worth it, the dollars you save will be more than made up in working around subtle bugs and trying to figure out what the poorly-worded, incomplete documentation is trying to convey.
I also warmly suggest not to bother with anything that says Atheros or Broadcom on the case. Their documentation is hopelessly tucked away behind a gazillion NDAs you have to sign, and working based on leaked material isn't fun. As for their SDKs, if you could get me started (but you can't because I signed that gazillion bazillion NDAs and I don't wanna go to jail), I could talk for days.
Sadly, I haven't worked with it either, but the Beaglebone Black looks like a good option and there's an actual community around it.
I'll definitely pick a up a Black then, as I do love TI chipsets and have had good experiences with their documentation. Such a shame they left the mobile market.
I'm setting up QEMU to have a crack at that while I wait for it to arrive. Thanks for the advice! I wish I could get you started, damn NDAs, I reckon you'll have a few stories to tell
Do you, by any chance, know of a resource that documents the process of actually getting your toy OS (which I assume was cross-compiled) to run on another board such as the BBB or the RPi?
Sorry for the late reply, I just saw your message. I don't have a toy OS (not enough spare time), but I did work on one as part of my job.
I don't know of any documents, but the way you'd generally want to do it is wrap hardware- and board-specific parts of your code in a hardware-agnostic interface which is what you use to write higher-level code in the system. That way, getting the OS to run on another CPU or board is all about writing the relevant callbacks. You can get the general idea from Linux's mach-* and plat-* files. This isn't really OS-specific; I'm pointing at Linux because it will probably be easiest to get documentation about it, though my personal preference is elsewhere.
If you're looking for something in the Pi price range, a Beaglebone Black seems about right and the TI SoC it uses has tons of publicly available, detailed documentation. On the other hand, if you want more features/periperals/cores, and don't mind not-so-thorough documentation, one of the boards based on Chinese SoCs could be more fun...
What would you suggest instead? I'm considering just firing up QEMU and it's ARM baseboard target then dealing with porting to real hardware later, but there's something exciting about seeing a real circuit firing up your kernel that makes me smile.