Thursday, December 20, 2012

Raspberry Pi Related Datasheets and Deep Look into Very Early Boot Stage

Broadcom BCM2835 SoC (used in Raspberry Pi) datasheet is available for download at http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf.

I thought that was enough to understand all there's to the Raspberry Pi from programmer's point of view with only that. It turns out, the aforementioned datasheet doesn't even said where the reset vector is. I'm new to ARM architecture, so, with a little bit of searching I found the CPU data sheet over at: http://infocenter.arm.com/help/topic/com.arm.doc.ddi0333h/DDI0333H_arm1176jzs_r0p7_trm.pdf. Well, actually there's an online version at http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0360f/CACGDJJC.html. But, I prefer the PDF version because I don't like to waste bandwidth just to look it up again and again. 

Now is the time to look deeper into it to understand the very early boot stage.
Thanks to the work of the FreeBSD guys, over at http://kernelnomicon.org/?m=201205, it get's much easier for me.
At this point, it's starting to look very similar to other embedded systems. I used to work on Realtek RTL8186 firmware and the stage to produce a working firmware is through a custom tool to "bind" all of the binaries into bootable binary. Have a look at Raspberry Pi mkimage tool over athttps://github.com/raspberrypi/tools/tree/master/mkimage. The python code in there (https://github.com/raspberrypi/tools/blob/master/mkimage/imagetool-uncompressed.py), really enlighten me how they're all put together into a working bootloader + kernel.


Post a Comment

2 comments:

Anonymous said...

Finally something low level :-)
Here are some important information, especially regarding the management of Frame Buffer Video ..
I was going to buy this little box to play with ARM processors, make a small operating system :-)
http://elinux.org/RPi_Documentation

Darmawan Salihun said...

Thanks for the link :-)