Loading... <div class="tip share">请注意,本文编写于 1183 天前,最后修改于 535 天前,其中某些信息可能已经过时。</div> 千呼万唤始出来!官方在2020-05-15发布了一个4B的beta版EEPROM固件更新,这次更新终于增加了期待已久的USB引导功能,今天这个教程就来讲一下如何使用USB而脱离SD卡启动树莓派4B。 > 数据无价,本教程的操作有一定的风险,开始前请备份重要数据!!! ## 前言 正式开始之前先说一下为什么4B的USB启动这么姗姗来迟。 要了解这个问题,我们先要了解一下4B之前的版本的启动流程,主要分为四个阶段: 1. GPU读取芯片上一个ROM的内容并执行 2. ROM中的程序挂载SD卡并加载第一个FAT分区上的bootcode.bin 3. bootcode.bin从FAT分区加载start.elf 4. 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启动流程的内容可以参考下面两篇文章: * [pi4 eeprom](https://www.raspberrypi.org/documentation/hardware/raspberrypi/booteeprom.md) * [pi4 bootflow](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/bootflow_2711.md) ## 更新eeprom ### 1、使用`rpi-eeprom`更新 最新的官方系统里已经集成了rpi-eeprom包来升级eeprom,官方github上有这个项目的源码,如果不是官方系统可以clone此项目来升级eeprom,项目地址是:[https://github.com/raspberrypi/rpi-eeprom](https://github.com/raspberrypi/rpi-eeprom),里面包含升级脚本和固件。 三方系统(例如树莓派爱好者基地2.0系统)升级方法***[请看这里](/21.html)*** ,这篇文章介绍官方系统的升级方法: 整个升级过程都需要root权限,如果你是用pi用户登录的,先执行`sudo -i`切换到root用户。 ```bash #升级系统软件包 apt update apt upgrade ``` 然后编辑`/etc/default/rpi-eeprom-update`文件,把内容改为`FIRMWARE_RELEASE_STATUS="beta"` 如果想用固件的默认配置直接执行`rpi-eeprom-update -d -a`,然后重启完成升级。 如果想修改eeprom的参数配置,请参考**[这里](https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2711_bootloader_config.md)** 。 重启后进入系统验证一下eeprom固件版本,执行`rpi-eeprom-update`,如果BOOTLOADER的版本在`2020-05-15`及以上就可以USB启动了。 ### 2、卡刷更新 除了进系统使用`rpi-eeprom`刷新以外,还可以使用卡刷。 到[https://github.com/raspberrypi/rpi-eeprom/releases](https://github.com/raspberrypi/rpi-eeprom/releases)下载最新的发布版`rpi-boot-eeprom-recovery-xxxx.zip`,然后解压到一张FAT32格式的空SD卡中,注意,直接解压`pieeprom.bin`、`pieeprom.sig`、`recovery.bin`等全部文件到根目录下不能带文件夹,插卡上电,绿色LED快速闪烁,至少等待10S后eeprom就刷好了。卡刷的方法更简单,推荐使用。 ## 准备启动介质 eeprom升级后要配合最新的BootLoader才能实现USB启动,而这个包目前在软件源中还没有更新,只能去github下载,地址:[https://github.com/Hexxeh/rpi-firmware](https://github.com/Hexxeh/rpi-firmware),打包下载后待用。 现在开始制作USB启动介质,如果想刷一个全新系统直接把镜像刷到U盘即可,如果想把当前SD卡上的系统迁移到U盘,可以使用**[这个脚本](https://github.com/nanhantianyi/rpi-backup)** 制作一个最小镜像(具体方法参考**[这里](/21.html)** 的后半部分),然后把镜像刷到U盘里。 刷好镜像,把U盘插到电脑上,解压上面下载的rpi-firmware包,把里面的fixup*.dat和star*.elf文件拷贝到U盘覆盖原文件。 把SD卡从pi上取出,插上U盘就可以从U盘启动了。 镜像刷到移动硬盘也是可以的,但是如果硬盘里原来有数据,那么数据将会被清除,想保留硬盘数据又想用硬盘启动树莓派也是有办法的,具体方法**[看这里](/83.html)** 。 最后放一张多分区移动硬盘启动的图 本文转载至 [南寒天一](https://linuxer.top/archives/raspi-4b-usb-boot.html) 最后修改:2022 年 04 月 04 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 2 如果觉得我的文章对你有用,请随意赞赏