树莓派启动流程

1) 树莓派上电启动

树莓派上电后,SoC 中的 第一启动程序 首先被执行,其作用是挂载 SD 卡上的 FAT32 分区,从而加载下一阶段的 bootloader。这部分程序被固化在 SoC 的 ROM 中,用户无法进行修改。

4B 在芯片内部增加了一块 EEPROM 来规避风险(由于 4B 硬件升级,导致启动过程较为复杂,如果将代码都写到 ROM 中,会增加复杂度以及引入可能的 BUG ),4B 上电运行 SPI 连接的 EEPROM 中的 bootloader 代码。

2) 树莓派执行 bootloader

在这个阶段,树莓派会加载 SD 卡上的 bootcode.binbootloader) 文件作为第二阶段的启动程序。bootloader会启动GPU并加载第三阶段的启动器start.elf
需要注意,4B 上不使用 bootcode.bin,因为它已由板载 EEPROM 中的启动代码替换。

3) 树莓派启动内核

start.elf 读取存放系统配置的文件 config.txt,根据其内容设置 CPU 运行参数及内存分配情况,随后将用户代码加载至内存,启动 CPU;

CPU 启动后,加载内核进行启动。

系统会先搜寻 config.txt 中参数 kernel=xxx 指定的文件作为接下来接受系统控制权的对象,树莓派默认该文件是 linux 内核,我们可以替换为用 uboot 作为新一个 bootloader 然后之后再去启动 linux 内核。

如果 config.txt 里没指定 kernel 参数,则默认是先后搜寻 kernel8.imgkernel8-32.imgkernel7.imgkernel.img,分别对应 ARMv8-aarch64ARMv8-aarch32ARMv7 和之前版本的。

猜你喜欢

转载自blog.csdn.net/xinlan3618/article/details/130523627
今日推荐