Raspberry Piのブートプロセスメモ

Raspberry PiのLinuxの起動プロセスをぐぐったらStack Exchangeでトピック「How does Raspberry Pi boot?」があったのでメモ
how-the-raspberry-pi-boots-up」と「Raspberry PI bare metal Part 1: The Boot Process」も参考に。

これによるとカーネルが起動するまでのブートプロセスは3段階に分かれている。

  1. Raspberry Piに電源が入った時はGPUが起動しARM coreはoff、SDRAMもdisabledな状態
  2. GPUは1段階のブートローダーを起動。このブートローダーはSoCのROMにある。ブートローダーはSDカードを読み込んで2段階目のブートローダー(bootcode.bin)をL2キャッシュに読み込みと実行をする
  3. bootcode.binはSDRAMを有効にし、3段階目のブートローダー(loader.bin)をSDカードからRAMへ読み込んで実行する
  4. loader.binはGPU firmware(start.elf)を読み込む
  5. start.elfはconfig.txt、cmdline.txtとkernel.imgを読み込む。kernel.imgはSDRAMのアドレス0x8000に置かれる。
  6. start.elfはARM coreをリセットしてkernel.imgのある0x8000から実行を開始する

Arch LinuxのRaspberry Pi版のconfig.txtでコメントアウトされていない箇所は以下のように設定されてる。

gpu_mem_512=316
gpu_mem_256=128
cma_lwm=16
cma_hwm=32
cma_offline_start=16

Model Bの場合、GPUがメモリが316MB使用し、CPUが196MBを使用するという感じの設定。その他の設定は「RPiconfig」を参照。

/boot/cmdline.txtはこのような感じ。

ipv6.disable=1 avoid_safe_mode=1 selinux=0 plymouth.enable=0 smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p5 rootfstype=ext4 elevator=noop rootwait

ARMで学ぶ アセンブリ言語入門

ARMで学ぶ アセンブリ言語入門