树莓派(Raspberry Pi)是如何启动的?

背景概述

自上次写完树莓派4的BOM的文章后,现在树莓派5也发布了,好吧,我拿到树莓派4还没几天呢,也许树莓派5这么一来,树莓派4还能降个价?

让我们继续学习树莓派4,我觉得要上手一个开发板,一方面是从原理图与BOM的角度,另一方面就是从它“启动过程”的角度,本文就来介绍一下后者。


树莓派4的启动过程

我首先想到的是去查询树莓派4主芯片BCM2711的芯片手册,不过博通(Broadcom)似乎并没有公布这颗芯片的资料,网上能找到的就只有树莓派提供的BCM2711外设手册,即“bcm2711-peripherals.pdf”,其他关于主芯片的资料少的可怜,这。。。不禁让人想到这颗BCM2711莫非就是博通给树莓派专供的?

图1-BCM2711外设手册,即“bcm2711-peripherals.pdf”,其中是有关于芯片外设控制器的信息

换个思路查询,找到树莓派官方文档描述的“树莓派4启动过程”(Raspberry Pi 4 Boot Flow),网址为这个这个

图2-树莓派官方提供的“树莓派4启动过程”,截图为“First Stage Bootloader”

不出意外对整个启动过程分了多阶段,截图仅是“First Stage”,而且有很多if……else……的条件判断,描述的挺细致,像个流程图。我们抓大放小,化简一下启动流程如下:

  1. 上电后:VideoCore VPU核启动,ARM核是并未启动
  2. 阶段1-VPU执行BCM2711芯片内on-chip ROM代码(First Stage Bootloader),查询OTP(One-Time Programming)储存位及状态,并判断启动模式
  3. 阶段2-VPU从板载EEPROM中加载Second Stage Bootloader(某个recovery.bin文件),这个阶段的Bootloader可以初始化内存、SD卡、USB、时钟(ARM时钟?)等外设,这个时候板载LED会闪烁用于指示启动状态
  4. 阶段3-VPU换另一个bin文件执行,这个阶段的Bootloader可以识别elf格式文件(在启动媒介中,如SD卡),后者用于加载kernel.img

上述启动过程都由VPN核执行,直到Linux kernel被加载进内存,并交由ARM核执行,后续就是比较标准的Linux启动过程了。此外,上述涉及到的Bootloader应该都不是开源的。

后来我找到一个树莓派官方提供的讲“Boot Security”的文档,也从三种不同媒介的角度表达了启动过程:

图3-树莓派4启动过程,涉及3个阶段对应了不同存储媒介(SoC ROM,EEPROM,启动媒介)

不过这里面还有几个问题,我觉得要细看一下:

  • BCM2711 SoC中的VideoCore VPU是什么核?
  • 树莓派4B的板载EEPROM在哪里?
  • 树莓派4B启动模式有哪些选项?
  • 树莓派4B启动日志和LED状态有哪些?

BCM2711 SoC中的VideoCore VPU是什么核?

VideoCore是一个由Alphamosaic开发,并已被Broadcom收购的低功耗移动多媒体指令集架构。二维的DSP架构使其可以灵活且高效地编解码多媒体数据,同时保持低功耗。它目前仅在Broadcom的SoC中被使用,相当于是一种GPU IP核。


树莓派4B的板载EEPROM在哪里?

既然是板载EEPROM,那么照道理可以从树莓派4B原理图中看到,但原理图中没有指出,包括其SPI总线与引脚,理由是官方的原理图是“REDUCED”(阉割)版本,我也是醉了。

图4-树莓派4B的原理图显示“REDUCED”阉割版

好在还是有网友还是分析出EEPROM应该位于音频接口附近,可能是类似Winbond W25X40的芯片:

图5-树莓派4B板载EEPROM的位置

那么为什么树莓派4B需要一个EEPROM?上述多stage/媒介的bootloader显得有点冗余,猜测是为了不需要大型媒介(如SD卡或U盘)时也能执行某些任务吧。


树莓派4B启动模式有哪些选项?

树莓派4可以从不同的媒介启动,其选项和顺序有如下:

图6-树莓派4B的启动选项和顺序

需要配置启动选项和顺序,可以通过Raspberry Pi Imager(PC上的Image工具)或者命令行Configuration GUI等方式,具体可以参阅这个链接。对于Raspberry Pi Imager来说,用于配置Bootloader的入口参阅如下图片:

图7-用Raspberry Pi Imager配置树莓派4B的Bootloader


树莓派4B启动日志和LED状态有哪些?

树莓派4B的启动日志,可以通过HDMI输出到显示器,这里面包含关键的启动信息,或者遇到的问题信息,有兴趣的朋友们可以认真看一下。

图8-树莓派4B的启动日志举例

这个界面只是显示日志,不支持U-Boot那样交互式操作。

树莓派4B的LED闪烁模式也能表明启动问题,具体参照如下,来源自这个链接

图9-树莓派4B的LED闪烁错误提示

好了,今天的介绍就到这里,希望对你了解树莓派4的启动过程有所帮助。如果你已拥有一台树莓派5,其启动过程的分析思路也可以借鉴。


参考内容

Raspberry Pi Documentation - Raspberry Pi hardware

https://github.com/raspberrypi/documentation/blob/develop/documentation/asciidoc/computers/raspberry-pi/bootflow-2711.adoc

How to Boot Raspberry Pi 4 / 400 From a USB SSD or Flash Drive

Raspberry Pi Documentation - Configuration

(全文完)


可以关注我的微信公众号“疯狂的运放”,及时收到最新的推文。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值