树莓派的启动流程

一、背景分析

在进一步研究学习 linux 嵌入开发之前,先来了解一下树莓派的启动过程。
树莓派具有一款博通的 BCM2835 系统芯片, 当启动时,CPU 会处于复位状态,由 GPU 核心负责启动系统。

主要研究如下过程:树莓派上电 --> bootloader --> linux 内核

关于Linux启动的详细过程,请看—>Linux启动过程详解

二、过程记录

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 和之前版本的。

树莓派启动注意事项

SD 卡里的 boot 需要包含如下文件:

  • overlays:存放设备树,必须有
  • bcm2711-rpi-4-b:设备树文件
  • bootcode.bin:第二阶段的bootloader,必须存在(4B除外)
  • fixup*.dat :链接器文件,与 start*.elf 文件匹配
  • start*.elf :GPU基本固件,第三阶段启动器
  • kernel.img :linux内核镜像,也可以为uboot,然后再进一步启动内核
  • config.txt :该文件是启动过程第三阶段用来读取参数的。
  • cmdline.txt :是树莓派原生系统启动时传给内核的参数
👇点击下方公众号卡片获取资料👇
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值