引脚图
前言
正式开始之前先说一下为什么4B的USB启动这么姗姗来迟。
要了解这个问题,我们先要了解一下4B之前的版本的启动流程,主要分为四个阶段:
- GPU读取芯片上一个ROM的内容并执行
- ROM中的程序挂载SD卡并加载第一个FAT分区上的bootcode.bin
- bootcode.bin从FAT分区加载start.elf
- start.elf从FAT分区加载kernel.img,然后唤醒CPU,CPU开始执行kernel.img
从这个流程中可以看到,第一阶段的BootLoader是从芯片上的ROM中读取的,ROM里的代码是出厂定制好的后期不能再改变。然而随着4B的硬件升级,USB被移到了PCIe总线,网卡也用了新的型号,再加上4B启动过程和SDRAM的设置远比之前的型号要复杂的多,继续使用集成在SoC ROM中的代码是有很大风险的,所以4B增加了一块EEPROM来解决这个问题,启动程序写入到EEPROM中来取代bootcode.bin的工作,启动程序的bug修复和新功能添加都方便了很多。
启动机制改动还是挺大的,所以USB启动姗姗来迟还是可以理解的。
关于EEPROM和4B启动流程的内容可以参考下面两篇文章:
更新eeprom
1、使用rpi-eeprom
更新
最新的官方系统里已经集成了rpi-eeprom包来升级eeprom,官方github上有这个项目的源码,如果不是官方系统可以clone此项目来升级eeprom,项目地址是:https://github.com/raspberrypi/rpi-eeprom,里面包含升级脚本和固件。
三方系统(例如树莓派爱好者基地2.0系统)升级方法请看这里,这篇文章介绍官方系统的升级方法:
整个升级过程都需要root权限,如果你是用pi用户登录的,先执行sudo -i
切换到root用户。
1 | #升级系统软件包 |
然后编辑/etc/default/rpi-eeprom-update
文件,把内容改为FIRMWARE_RELEASE_STATUS="beta"
如果想用固件的默认配置直接执行rpi-eeprom-update -d -a
,然后重启完成升级。
如果想修改eeprom的参数配置,请参考这里。
重启后进入系统验证一下eeprom固件版本,执行rpi-eeprom-update
,如果BOOTLOADER的版本在2020-05-15
及以上就可以USB启动了。