树莓派启动过程分析

一、背景分析

  • 在进一步研究学习 linux 嵌入开发之前,先来了解一下树莓派的启动过程
  • 树莓派具有一款博通的 BCM2835 系统芯片, 当启动时,CPU 会处于复位状态,由 GPU 核心负责启动系统
  • 主要研究如下过程:树莓派上电 --> bootloader --> linux 内核
  • 转载请标注出处,如果有问题,可以到我的文章中进行评论 [树莓派启动过程分析]

二、过程记录

1) 树莓派上电启动

  1. 树莓派上电后,SoC 中的 第一启动程序 首先被执行,其作用是挂载 SD 卡上的 FAT32 分区,从而加载下一阶段的 bootloader。这部分程序被固化在 SoC 的 ROM 中,用户无法进行修改。
  2. 4B 在芯片内部增加了一块 EEPROM 来规避风险(由于 4B 硬件升级,导致启动过程较为复杂,如果将代码都写到 ROM 中,会增加复杂度以及引入可能的 BUG ),4B 上电运行 SPI 连接的 EEPROM 中的 bootloader 代码。

2) 树莓派执行 bootloader

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

3) 树莓派启动内核

  1. start.elf 读取存放系统配置的文件 config.txt,根据其内容设置 CPU 运行参数及内存分配情况,随后将用户代码加载至内存,启动 CPU;
  2. CPU 启动后,加载内核进行启动
    系统会先搜寻 config.txt 中参数 kernel=xxx 指定的文件作为接下来接受系统控制权的对象,树莓派默认该文件是 linux 内核,我们可以替换为用 uboot 作为新一个 bootloader 然后之后再去启动 linux 内核。如果 config.txt 里没指定 kernel 参数,则默认是先后搜寻 kernel8.img、kernel8-32.img、kernel7.img、kernel.img,分别对应 ARMv8-aarch64、ARMv8-aarch32、ARMv7 和之前版本的。

4) 树莓派启动注意事项

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

      (1)overlays:存放设备树,必须有
      (2)bcm2711-rpi-4-b:设备树文件
      (3)bootcode.bin:第二阶段的bootloader,必须存在(4B除外)
      (4)fixup*.dat :链接器文件,与 start*.elf 文件匹配
      (5)start*.elf :GPU基本固件,第三阶段启动器
      (6)kernel.img :linux内核镜像,也可以为uboot,然后再进一步启动内核
      (7)config.txt :该文件是启动过程第三阶段用来读取参数的。
      (8)cmdline.txt :是树莓派原生系统启动时传给内核的参数
    

三、总结

  • 完成时间:2022-03-29 14:00
  • 经过分析树莓派启动的过程,有利于接下来的内核编译和替换操作。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值