MENU

(二)树莓派boot流程

2020 年 10 月 25 日 • 树莓派

本文主要介绍树莓派的上电启动流程,从bootloader加载到内核启动。
This article mainly introduces the power-on startup process of Raspberry Pi, from bootloader loading to kernel startup.

树莓派上电启动大体可以分为4个阶段。

STAGE1.固化代码执行

一般的嵌入式设备的时候,都是有固定的第1行代码的启动策略。比如在NORFLASH里装载bootloader,板子上电后固定从0地址运行NORFLASH,然后再由这段代码去初始化CPUSDRAM等,最后再加载内核、根文件系统到内存,实现系统启动。

而树莓派也是类似的,不过树莓派上电时首先运行的是GPU、由这个GPU去读取ROM里的出厂固化的代码,然后去运行。

对于树莓派2B而言,BCM2836soc组成如下,没有从博通的官网找到数据手册,大致是下面这回事情。这个芯片包含了一个VideoCore IVGPUCortet A7的ARM核。

rpi2-11.jpg

STAGE2.运行bootcode.bin

第一阶段执行完毕后,GPU开始去加载SD卡第一个FAT分区根目录下载bootcode.bin文件,由于这个文件是GPU运行的代码,博通并没有开源。

STAGE3.运行start.elf

紧接着,GPU会读取SD卡第一个FAT分区根目录下的start.elf文件,很不幸,这个文件的代码也是不开源的。

STAGE4.加载运行

GPU读取SD卡第一个FAT分区根目录中的kernel.img(Linux 内核) 到内存,然后启动CPU运行内核。

参考文献

[1] https://www.jianshu.com/p/93d339418e04
[2] 开源VideoCore IV的启动固件https://github.com/librerpi/rpi-open-firmware