拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

树莓派5变砖自救:闪码诊断、EEPROM恢复与系统镜像救援

树莓派5变砖自救:闪码诊断、EEPROM恢复与系统镜像救援 树莓派5开不了机我第一个看的是绿色ACT LED的闪码而不是去动SD卡。原因很简单这块板子的启动流程里EEPROM里的引导加载程序是总开关它起不来SD卡和NVMe上就算躺着完整的系统镜像也没有意义。闪码、EEPROM、镜像恢复这三件事在树莓派5上是串在一起的多数“变砖”其实是引导加载程序或启动配置出了岔子而不是硬件真烧了。这篇文章就从我实际修过的几台5代板子出发把闪码诊断、EEPROM恢复、系统镜像救援一条线说清楚。适合手里有树莓派5、正在折腾NVMe扩展板、或者想提前准备一套完整救援流程的人。1. 树莓派5启动链路拆解EEPROM坏掉为何比SD卡损坏更头疼1.1 从BootROM到引导加载程序树莓派5的“两级启动”树莓派4以前的启动流程简单说就是SoC一跳电GPU那边的固件直接从SD卡里读start.elfSD卡坏了就报错重刷SD卡往往能救回来。树莓派5改成ARM核来主导启动SoC内部写死的BootROM先接管然后从板子上的SPI EEPROM读取二级引导加载程序这段加载程序负责初始化DDR内存、时钟、电源管理、PCIe和USB3最后才按照BOOT_ORDER去扫启动介质。这一改让树莓派5能直接支持NVMe、USB3这些高性能介质但也带来了新问题EEPROM一旦损坏整块板子连“自检”都过不了。你可以把它理解为电脑主板上的BIOS或固件。硬盘上的操作系统坏了重装系统就行BIOS被刷坏就得用烧录器或特定恢复通道把固件救回来。树莓派5的EEPROM就是这块“BIOS”官方这次把它的容量提到了8MB比树莓派4的4MB整整翻了一倍多出来的空间就是为更可靠的恢复机制准备的。1.2 这8MB里到底放了多少东西树莓派5的EEPROM里放的并不只是单一版本的引导加载程序。大致可以分为三层引导加载程序本体、配置区、恢复与安全冗余。引导加载程序本体负责硬件的早期初始化和启动介质扫描。配置区就是那一堆BOOT_ORDER、BOOT_UART、POWER_OFF_ON_HALT之类的键值对它们决定了固件的运行行为。恢复与安全冗余则是树莓派5新增的重点——新版引导加载程序的更新采用了类似原子替换的机制更新时先在另一块区域写好好新固件再切换过去目的就是降低“写一半断电变砖”的概率。注意原子替换只是降低概率不是杜绝。实际维修中我还是见过不少更新中途断电、或者手动擦写把整片SPI flash清空的案例。1.3 哪些操作最容易把EEPROM搞坏我遇到的EEPROM损坏基本逃不出三类跑rpi-eeprom-update或第三方刷写工具写到一半断电这是最常见的翻车姿势。不清楚后果就去改EEPROM配置区有人直接把BOOT_ORDER写成了无效值更狠的用SPI编程器把整片flash擦空了。超频调试时SoC已经不稳定结果刷写过程中死机或者写入数据出错。这类故障不修好SD卡和NVMe上的镜像再完整也白搭——引导加载程序根本没机会把系统读起来。这也是为什么树莓派5的故障排查必须先看闪码再谈恢复。2. 闪码诊断长闪定组件、短闪定细节快速锁定故障层2.1 绿色LED的“电报协议”树莓派5的电源红灯亮不代表正常它只表示供电持续真正传递故障信息的是绿色ACT LED。当引导加载程序在启动阶段遇到错误会通过LED的长短闪烁组合来“发报”。这套协议的基本思路是长闪次数表示失败发生的组件或阶段短闪次数表示该阶段里的具体错误码。一组结束后系统会停很久然后重复。举两个例子3次长闪加上几次短闪基本都在说固件层的start.elf或start4.elf缺失、损坏或加载失败4次长闪加上短闪问题则集中在kernel8.img也就是64位内核镜像上。看到4长开头就别再怀疑EEPROM固件本身的问题了该去查系统盘里的内核文件。2.2 常用闪码对照表以下对照表基于树莓派4和5共用的LED错误码协议也是我排查时用得最多的几个闪烁模式故障阶段最可能的原因3长2短固件加载无法找到 start.elf引导分区缺失或不可读3长4短固件加载无法找到 start4.elf树莓派5用的是4系固件3长6短固件加载start4.elf 启动后被中止4长4短内核加载无法找到 kernel8.img4长5短内核加载kernel8.img 无法加载或镜像格式损坏4长7短内核加载内核启动过程中被中止6长开头分区/存储SD卡或eMMC分区表异常需要提醒的是长闪对应的阶段编号会随bootloader版本微调所以不要死记硬背。看表的时候重点是判断故障层3长组是引导固件层4长组是OS内核层完全没有闪码且红灯不亮那先检查电源和PMIC别急着动盘。2.3 闪码之外的另一条线索串口日志只看LED还不够把串口日志拉出来才算完整。树莓派5的GPIO 14/15上有一路UART用一个3.3V的USB转串口模块接上在config.txt里加一行enable_uart1或者在EEPROM配置区把BOOT_UART设为1启动全过程的日志都会打到串口上。BootROM阶段的信息尤其珍贵因为此时系统盘还没开始加载你在操作系统里看到的dmesg根本不存在。有一回我拿到一块板子用户说开机卡住、换卡无效我扫到绿色LED是4长5短第一反应就是内核镜像被破坏了跟EEPROM没有关系。拆盘挂到另一台机器上一看果然是之前用dd恢复镜像时中途失败kernel8.img只有一半重写镜像就活了。这就是闪码诊断的意义花十秒钟定位比盲目重刷几个小时强得多。3. EEPROM恢复实操SD卡恢复镜像与USB主机模式两条路3.1 方案A官方恢复镜像配SD卡门槛最低当闪码指向EEPROM或引导加载程序这一层或者连闪码都出不来、只有电源红灯亮时就该动EEPROM了。最简单的恢复方式是用官方恢复镜像加一张SD卡。在电脑上打开Raspberry Pi Imager先别急着选操作系统而是进Misc utility images挑Raspberry Pi 5 EEPROM boot recovery把它烧到一张空SD卡上。然后把这张卡插进树莓派5接上电源。整个恢复过程不需要接显示器绿色ACT LED会快速闪一阵大约十来秒后停止。此时断电、取下SD卡、重新上电引导加载程序就会被刷回官方稳定版BOOT_ORDER也会回到默认值。注意这个过程会顺手把EEPROM里的配置区恢复成出厂状态。如果你之前调过BOOT_ORDER或开启过串口调试恢复完成后要重新配置不然原来从NVMe启动的系统可能又要改一次启动顺序才能正常认盘。3.2 方案BBOOT键加USB主机模式适合救急第二条路是BOOT键加USB主机模式。树莓派5的USB-C口除了供电在恢复模式下也承载数据。按住板上BOOT键再插USB-C线SoC里的BootROM会进入恢复模式把板子枚举成一个USB设备电脑上用官方usbboot工具就能直接读写SPI EEPROM。git clone --depth 1 https://github.com/raspberrypi/usbboot cd usbboot git submodule update --init sudo ./rpiboot运行rpiboot后如果没有额外参数它默认加载一个mass-storage的gadget镜像EEPROM会像一个U盘一样出现在电脑里这时就可以用官方EEPROM镜像重写。如果只是想整体修复启动也可以放一份recovery.bin和对应版本的pieeprom-*.bin在同目录rpiboot会把它们当成恢复介质直接执行刷写。这条路适合SD卡槽都读不了盘、或者想精确刷指定版本固件的情况。它也和网络安装模式相通保持联网、按住BOOT键上电树莓派5可以进入官方网络安装界面直接装回系统并同步更新引导加载程序连读卡器都能省掉。3.3 刷完之后的验证步骤刷完EEPROM别急着收工。接上显示器和电源后先跑几条命令确认固件确实活了# 查看当前EEPROM固件版本并对比官方最新版本 sudo rpi-eeprom-update # 查看配置区内容 sudo rpi-eeprom-config # 直接打印引导加载程序版本 vcgencmd bootloader_version第一条能看出BOOTLOADER: up to date还是提示有更新第二条会列出BOOT_ORDER、BOOT_UART等配置第三条直接告诉你ROM里运行的引导加载程序构建日期。只要这里能正常输出EEPROM这一层就算稳了接下来再把系统盘的优先级调回去就行。4. 系统镜像救援分区还原则、PARTUUID匹配与无备份抢救4.1 先分清是内核层故障还是rootfs故障如果闪码落在4长组也就是内核镜像层或者系统起来一半就崩问题在引导介质上EEPROM通常不用动。这时候的恢复核心是系统镜像。树莓派5上典型Linux系统的分区结构其实很简单第一个分区是FAT32的bootfs新版树莓派OS默认挂在/boot/firmware里面放start4.elf、内核、设备树、config.txt和cmdline.txt第二个分区是ext4的rootfs。启动分区损坏往往表现为进不了内核rootfs损坏则表现为主机起了一半、日志刷到一半断掉。两种情况都可以用完整镜像恢复一口气解决。4.2 整盘备份与恢复dd是最实在的工具我比较推荐的做法是平常就做好整盘备份而不是等翻车再想办法。整盘备份在Linux下一条dd就能完成# 备份整张SD卡或NVMe盘 sudo dd if/dev/sda of~/pi5_backup_$(date %Y%m%d).img bs4M convfsync statusprogress # 如果不想占太多空间可以压缩备份 sudo dd if/dev/sda bs4M statusprogress | gzip ~/pi5_backup_$(date %Y%m%d).img.gz恢复的时候反过来# 把完整镜像写回一张新卡或新盘 sudo dd if~/pi5_backup_20250212.img of/dev/sda bs4M convfsync statusprogress # 压缩镜像的恢复写法 gunzip -c ~/pi5_backup_20250212.img.gz | sudo dd of/dev/sda bs4M statusprogress convfsync用dd做完整镜像的好处是分区表和PARTUUID一并被带走恢复到另一张卡上cmdline.txt里的rootPARTUUID...依然匹配开机基本不折腾。如果你是手动重建分区、或者用Imager烧了官方系统再把文件拷进去那就要特别检查cmdline.txt里的PARTUUID和blkid的输出是否一致不一致直接起不来。这个坑我见过太多次尤其是从NVMe迁移到SD卡、或者反过来的时候。4.3 没有备份时的数据救援思路没有备份也不是世界末日。把故障盘拆下来挂到另一台Linux机器上先fdisk -l看分区表还在不在。分区表丢了就用testdisk试着重建分区表还在但rootfs报错就mount到本地把/home、/etc、数据库文件这些关键数据rsync出来。树莓派5支持从USB3和NVMe启动系统这给救援提供了很大便利完全可以临时插一块干净盘启动把故障盘当数据盘挂载慢慢抢救文件。顺便提一个很多人忽略的点如果你这台树莓派5跑过模型训练或推理比如自己训练的YOLOv5、或者本地部署的对话模型权重文件和数据集往往都堆在rootfs里。这种机器做备份时别只备份系统分区建议把/home以及项目目录单独rsync或rclone一份到NAS或云端。系统坏了可以重刷数据集没备份就真的没了。5. BOOT_ORDER配置、定期备份与固件更新的防翻车清单5.1 把BOOT_ORDER改成你实际用的启动源树莓派5的配置文件放在EEPROM配置区常见默认值是BOOT_ORDER0xf241表示先试SD卡、再试USB、再试PCIe/NVMe全部失败后循环。如果你只插一块NVMe系统盘每次开机都要等SD卡超时再跳到NVMe体验很差。修改命令sudo rpi-eeprom-config --edit把BOOT_ORDER改成需要的值保存后重启生效。改之前一定要先备份旧配置sudo rpi-eeprom-config --export backup.txt备份文件就是一段纯文本出问题时可以用sudo rpi-eeprom-config --import backup.txt原样导回这是成本最低的保险。关于BOOT_ORDER具体每个十六进制数字代表什么启动源不同bootloader版本略有差异我建议改之前先跑一条sudo rpi-eeprom-config看一下当前值再对照官方文档确认含义不要凭记忆写。5.2 做一张救援卡关键时刻能省几个小时找张2GB以上的SD卡烧一次官方EEPROM recovery镜像贴个标签丢在抽屉里。同时把常用系统镜像、dd备份放到NAS或移动硬盘。这样下次出问题十分钟内就能判断是EEPROM还是系统层的故障并按对应路径恢复。我还习惯在新板子到手时做一次“恢复演练”故意把EEPROM配置区写乱然后走一遍恢复镜像流程确认救援卡能用再把它封存。这套操作听着麻烦但救急时你会庆幸自己提前验证过。如果用的是NVMe系统盘也建议把系统镜像备份到另一块移动硬盘而不是只在同一条NVMe上留一份分区副本数据冗余的意义就是防止单点故障。5.3 更新EEPROM固件的正确姿势更新EEPROM并不是找人要个刷写软件就开刷官方工具链是rpi-eeprom-update配合apt更新源把固件包升到新版本再用sudo rpi-eeprom-update -a刷写。刷写过程中绝不能断电最好接个UPS或者确保不会有人碰插头。更新完等ACT灯稳定再执行sync然后正常关机。想回退旧版本rpi-eeprom-update -r可以做到不过官方只推荐在诊断明确时回退。还有一点容易被忽略树莓派5的系统更新里引导加载程序有时会随着apt upgrade一并升级如果当时没插电源或者中途断网更新可能处于pending状态。每次大版本系统升级后最好跑一次sudo rpi-eeprom-update确认没有残留的待刷写任务。我自己的习惯是拿到一块新树莓派5第一件事不是装桌面环境而是先把EEPROM恢复卡和系统备份准备好再把BOOT_ORDER调到匹配实际存储的启动源。听起来麻烦但真到绿灯闪码那一刻你会发现之前的准备全值回来了。闪码这个东西说穿了就是板子用最原始的方式告诉你它卡在了哪一层固件、内核还是电源。按这个思路去修树莓派5的“变砖”其实大多不用返厂。
返回列表