IT/embedded

Raspberry Pi boot sequence(ENG)

lowsec 2015. 8. 13. 17:16

Reference : https://github.com/freebsd/crochet



PHASE ONE: Initialize the hardware

==================================


This first boot phase is common to any use of RaspberryPi, whether

you're booting Linux, FreeBSD, or any other software.  It loads a

series of proprietary boot loader files that initialize the

hardware and ultimately load and run some executable.


These initial bits are loaded from the first partition on the SD card.

That partition must be formatted as FAT16 or FAT32.


* At power on, the ARM core is off and the GPU is on.  SDRAM is disabled.


* GPU ROM code reads bootcode.bin from SD card and executes it on the GPU.


* bootcode.bin enables SDRAM and loads start.elf


  (Note:  bootcode.bin used to execute loader.bin and loader.bin then

  loaded start.elf.  This is no longer true since Oct 2012; loader.bin

  is gone and bootcode.bin now loads start.elf directly.)


  (If gpu_mem is set very low, then bootcode.bin reads start_cd.elf

  instead.  This is a stripped-down version which lacks the

  video support; suitable for systems that run purely with serial

  console.)


  (Q: Does bootcode.bin read config.txt?  Seems like it

  must if it loads start_cd.elf depending on the memory config.)


* bootcode.bin executes start.elf on the GPU (start.elf is

  the "GPU firmware" that remains resident.)


* start.elf reads config.txt and uses it to configure the hardware.


* start.elf loads an FDT machine description into memory

  at a fixed address.


* Optional: start.elf reads cmdline.txt with arguments for kernel.img


The next part depends on what OS you are loading.  In any

case, start.elf remains in place on the GPU.  Video drivers

in the OS talk to start.elf (they don't communicate directly

with the GPU).


PHASE TWO for LINUX:

====================


If you're booting Linux, start.elf loads a file called

kernel.img containing the Linux kernel.