Also, U-Boot can boot a lot of things this days.
So if I were to build an OS for ARM or MIPS I would:
1) Build it on an emulator that can boot from ELF or a binary blob.
2) When it's time to run on real hardware, try to use U-Boot.
3) If that fails, write my own boot loader.
The moral of the story is: bootloaders are not my kind of fun, so I'll avoid writing them at all costs.
At the end of the course, we had only the boot loader and a little command interpreter, aside from FAT-12 support.
Then, much later, I messed with OS by playing with the code from the Minix Book [1].
Last year I wrote a little emulator for a virtually unknown architecture that can run uClinux on a modern browser (i.e., Chrome)[2].
[1] Operating System Design and Implemenation: http://www.amazon.com/Operating-Systems-Design-Implementatio...