👁 339

问题现象

Orange Pi 6+ 热重启(reboot)后卡在 Logo 画面,冷启动(拔电重插)正常。

根因分析

SE_FW warm boot 路径不初始化 QSPI 控制器 → 热启时读不到 SPI NOR → 卡 Logo

证据:

  • SE_FW 有 service_warm_boot_entry 和 service_cold_boot_entry 两条路径
  • Cold boot 时 cdns_xspi clock/reset done → QSPI 正常初始化
  • Warm boot 时可能跳过 QSPI 初始化 → QSPI 状态异常 → 读不到固件

修复方案(按推荐度排序)

方案 A:Linux 内核参数 reboot=cold ⭐⭐⭐

在 OPi6+ 的 Linux 中添加内核参数,强制走 cold reset 路径:

# 编辑 /boot/extlinux/extlinux.conf 或 EFI 变量
# 在 APPEND 行添加 reboot=cold

临时测试:

echo cold > /sys/kernel/reboot_mode  # 如果存在
reboot

方案 B:PMIC Power Cycle ⭐⭐

通过 PMIC 触发完全断电重启(等效拔电源):

# 需要找到 PMIC 的 reset 寄存器
# TI PMIC5475 有 3 组,可能通过 I2C 操作
# 具体地址需要查 OPi6+ 的设备树或原理图

方案 C:修改 FV2 FvLength ⭐

虽然不能解决热启问题,但能防止 NVRAM 越界写入:

# 把 FV2 @ 0x3FE0E0 的 FvLength 从 0x200000 改为 0x1F20
# 这样 UEFI 不会写 0x400000+ 的加密 DXE 区域

方案 D:找 CIX/OrangePi 要新版 BIOS ⭐⭐⭐

SE_FW 版本是 2025 年 9 月的(2.0.2025W36.01),BIOS 是 2026 年 1 月的(BiosV1.4-W20260130),可能已经有更新修复此 bug。

补充方案

如果以上方案都不方便立即操作,还可以:

  • 生成修改 FV2 FvLength 的 BIOS 镜像(防 NVRAM 越界)
  • 写一个 Linux 脚本在 reboot 前 reset QSPI 控制器
  • 搜索 OPi6+ 官方论坛看有没有热启问题的讨论