Raspberry Pi 3 の起動シーケンス
ご存じの方も多いと思いますが,Raspberry PiはCPUから起動が始まるのではなく,GPUが先に起動し,その上で動作するファームウェアがCPUやその他周辺機器の初期化を行い,カーネルをメモリにロードして制御を移し,起動するようになっています. カーネルの読み込まれる位置は0x00080000になるようです.
GPUはリセットベクタを0x0番地にコンフィグ情報を0x100番地にセット。続いてconfig.txtのkernel行で指定のファイル(無指定のデフォルトはkernel.img)を0x8000番地に読み込み、ARM CPUのリセットを解除し0x8000番地からのプログラムが実行される。 Enable ARMv8 on RPi3B
When running lscpu or cat /proc/cpuinfo the reported processor ist ARMv7. To tell the RPi3B to start in ARMv8-mode you have to add a new line to config.txt. arm_control=0x200
initial sequence overview
https://gyazo.com/d7f6a8b73d2b21bc45762b526f138af6
sequence source code
code:markdown
`sequence
User -> Pi: Poewr ON
Pi ->GPU: start
GPU ->ROM: Get \nbootloader
GPU -> boot\nloader: start
boot\nloader -> SD: Get \nbootcode.bin
boot\nloader -> bootcode\n.bin: start
bootcode\n.bin ->SDRAM: Enabled
bootcode\n.bin -> SD: Get loader.bin
bootcode\n.bin -> loader\n.bin: start
loader\n.bin-> SDRAM: load start.elf
start\n.elf -> SDRAM: load config.txt
start\n.elf -> SDRAM: load cmdline.txt
start\n.elf -> SDRAM: load kernel.img
Note over SDRAM: kernel.img \nfrom 0x0008000
start\n.elf ->ARM\ncore: reset
start\n.elf ->ARM\ncore: start kernel.img
ARM\ncore-> SDRAM: load from 0x0008000
`