RPi boot
ok, first, several links:
- Theo's no: Wow. Dream on
- The most important thing you should know is that the RaspberryPi is a strange beast
- I do not normally zero out .bss or use .data so … dont assume x and y are zero when your program starts
- WARNING: This page is not suitable for the average user. - too many disclamers of this kind - gona go buy another board"
- In order to understand the software compoonents in the RPi, you should first understandhow it boots up.
As mentioned elsewhere, "ARM CPU is the not main CPU - it's only a co-processor to the VideoCore GPU. When the RaspberryPi starts, a GPU blob is read from the SD card to the L2 cache and executed. This code then brings up all the important peripherals (RAM, clocks etc) and starts the ARM CPU. Then the 2nd stage bootloader or some operating system itself can be run on ARM CPU."
According to this and other sources, RPi boot process looks like this:
- GPU Core
- first stage bootloader, which is stored in ROM on the SoC
bootcode.bin
(loader.bin
merged) - the 2nd stage bootloaderstart.elf
- the main GPU codeconfig.txt
- file is read by the GPU before the ARM core is initialisedfixup.dat
- is used to configure the SDRAM partition between the GPU and the CPUcmdline.txt
- file for passing arguments to the Linux kernelkernel.img
- The OS kernel to load on the ARM processor
For board to boot you need an SD-card with FAT32 partition, and files mentioned above placed in a root of this partition. Binaries are available here in boot folder. Actually there are more of them there:
fixup_cd.dat
,start_cd.elf
- cut-down versions of the above files, used when GPU memory is set to 16 MB, which in result disables some GPU featuresfixup_x.dat
,start_x.elf
- testing versions of the above files, which enable potentially unstable/not-fully-tested/hacky functionality
config.txt and cmdline.txt are just a text files, you can edit them
according to docummentation. kernel.img
is usually a linux kernel - the first thing to run on ARM CPU, but it can be an additional
chained boot loader like u-boot, and for our experiments we will use the later.