树莓派的启动流程

为了降低成本,树莓派省去了传统计算机用来存储引导加载程序的板载存储器(BIOS), 而是直接把引导程序放在了SD卡中。
model-b-plus-Raspberry-Pi
树莓派B+模型图

树莓派具有一款博通的BCM2835系统芯片, 当启动时,ARM1176JZF-S的CPU会处于复位状态,由VideoCore IV GPU核心负责启动系统。启动的第一阶段, 从系统芯片中加载第一阶段的启动程序, 这个启动程序负责加载存放在SD卡中的第二启动程序(bootcode.bin)。bootcode.bin在VideoCore GPU上执行并加载第三阶段的启动器start.elf。 start.elf读取存放系统配置的文件config.txt。

当config.txt文件被加载解析之后, start.elf会读取cmdline.txt和kernel.img. cmdline.txt包涵内核运行的参数,而kernel.img将会被加载到处理器分配的共享内存中,当内核加载成功,处理器将结束复位状态,内核开始正式运行,系统启动正式开始。

启动流程:
1, 系统加电。
2, 加载系统芯片中的第一启动程序。
3, 第一启动程序加载SD卡上的bootcode.bin。
4, bootcode.bin执行,并加载第三阶段启动程序start.elf。
5, start.elf读取config.txt并加载内核。
6, config.txt解析完成,start.elf读取再次加载cmdline.txt文件,最后加载内核文件,然后CPU开始运行,系统启动成功。

参考:
1, Understanding the Raspberry Pi Boot Process