适用设备:OESP / OES 系列飞牛OS ARM 设备
系统布局:eMMC 引导 + SATA 系统盘
核心思路:小版本走”注释 rootdev 切引导 + 双系统各自 OTA”;大版本动了 trim 内核文件,必须 U 盘启动辅助改 boot
一、先说结论:分两种情况
迁移到 SATA 后做 OTA,能不能”直接点更新”取决于更新包的大小:
| 更新类型 | 判断依据 | 是否需要 U 盘 | 操作复杂度 |
|---|---|---|---|
| 小版本更新 | 没有更新 trim 内核文件,只动了系统层 | 不需要 | 注释两处 rootdev 即可 |
| 大版本更新 | 更新了 trim 相关文件(内核/boot) | 需要 | 小版本流程 + U 盘启动改 boot |
下面分别讲。
二、小版本更新:注释 rootdev 来回切
小版本更新的特点是不动 trim 内核文件,所以 eMMC 和 SATA 两边的 boot 不会被破坏,只需要在两次 OTA 之间来回切换引导目标即可。
第 1 步:进 SATA 系统,先注释 rootdev
当前设备正常跑在 SATA 系统上。SSH 登录 SATA 系统后,编辑 eMMC 引导分区上的 fnEnv.txt:
nano /vol00/RemovableDisk/fnEnv.txt
找到这一行:
rootdev=PARTUUID=3f9b6268-02
在行首加 # 把它注释掉:
#rootdev=PARTUUID=3f9b6268-02
保存退出。这一步的作用是:让下次重启从 eMMC 启动,而不是 SATA。
第 2 步:直接在 SATA 系统里点更新
注释完 rootdev 后,不用重启,直接在 SATA 系统的网页里点 OTA 更新。
更新完成后设备会重启。由于 rootdev 已被注释,这次重启会进入 eMMC 飞牛系统。
第 3 步:进 eMMC 系统,去掉注释
SSH 登录 eMMC 系统(注意这次进的是 eMMC,不是 SATA),编辑 eMMC 上的 fnEnv.txt:
nano /boot/fnEnv.txt
把刚才加上的 # 去掉,恢复成:
rootdev=PARTUUID=3f9b6268-02
保存退出。这一步的作用是:让下次重启重新从 SATA 启动。
第 4 步:进 eMMC 系统点更新
现在还在 eMMC 系统里,直接在 eMMC 的网页里点更新,把小版本更新也应用到 eMMC 侧。
更新完成后重启,rootdev 已恢复,设备会正常启动 SATA 上的飞牛系统。
小版本流程小结
SATA 系统 SSH → 注释 /vol00/RemovableDisk/fnEnv.txt 的 rootdev
→ SATA 网页点更新 → 重启进 eMMC
→ eMMC SSH → 去掉 /boot/fnEnv.txt 的注释
→ eMMC 网页点更新 → 重启正常进 SATA
两边各升一次,版本对齐,引导文件没被大改,所以能正常来回切。
三、大版本更新:动了 trim 文件,必须 U 盘辅助
大版本更新的关键区别是:更新包会替换 trim 相关文件(内核、boot 相关)。
这种情况下,即使你按小版本的流程注释 rootdev、两边各自升级,SATA 侧的 boot 分区和内核文件仍然可能对不上。典型表现就是:
- 升级完成后重启,网络红灯;
- 主网口失联,接显示器发现网卡驱动没加载;
- 系统起不来,卡在引导。
这是因为大版本换了内核,而 SATA 系统区的 /boot 里的内核文件、DTB 没有同步更新到匹配的新版本,引导时找不到对应的内核/驱动。
大版本的处理方式:U 盘启动辅助改 boot
大版本更新不能只靠注释 rootdev 来回切,需要 U 盘启动来辅助修改 boot 文件。
大致流程:
- 准备 U 盘:写入与目标版本一致的飞牛镜像,制作成启动盘。
- U 盘启动设备:从 U 盘进入系统,此时你有完整的 root 权限和工具环境。
- 挂载并修正 boot 文件:
- 用
blkid确认 eMMC boot 分区和 SATA boot 分区的设备名; - 检查
fnEnv.txt里kernelfile=、fdtfile=指向的文件; - 对照
/boot目录下实际存在的vmlinuz-*、.dtb文件; - 把 U 盘启动分区里匹配新版本的内核、DTB 等 boot 文件复制/dd 到 eMMC boot 分区(或按你最终引导目标复制到 SATA boot 分区);
- 确保
fnEnv.txt里的kernelfile=和fdtfile=指向的文件确实存在。
- 用
- 恢复 rootdev 指向 SATA,断电重启。
- 确认能正常进入 SATA 系统、网口正常。
为什么大版本必须 U 盘?因为大版本更新后,如果 SATA 侧已经红灯失联,你无法通过 SSH 进去改 boot——网络都不通了,只能从外部(U 盘系统)挂载分区来补文件。这就是”U 盘辅助”的本质:提供一个不依赖故障系统网络的修复环境。
大版本流程小结
小版本的四步照做(注释 rootdev → SATA 更新 → eMMC 去注释 → eMMC 更新)
→ 如果重启后红灯/网口失联
→ U 盘启动 → 挂载 eMMC/SATA boot 分区
→ 修正 kernelfile/fdtfile 指向,补齐内核与 DTB
→ 恢复 rootdev 指向 SATA → 重启
四、两种情况的判断方法
升级前怎么知道是小版本还是大版本?
- 看更新日志:如果更新说明里提到内核版本变化、trim 相关组件更新,按大版本处理。
- 看更新包大小:大版本通常包含内核和 boot 文件,包体明显更大。
- 保守做法:不确定时,先按小版本流程走;如果升级后重启出现红灯或网口失联,立即按大版本方式用 U 盘修复。升级前务必先做好状态备份(PG 注册表、App 套件、用户配置、SSH 密钥),避免 App 登记丢失。
五、关键操作速查
小版本更新
# 1. SATA 系统 SSH 进去,注释 eMMC 引导分区的 rootdev
nano /vol00/RemovableDisk/fnEnv.txt
# 把 rootdev=PARTUUID=3f9b6268-02 改成 #rootdev=PARTUUID=3f9b6268-02
# 2. SATA 网页点更新 → 重启进 eMMC
# 3. eMMC 系统 SSH 进去,去掉注释
nano /boot/fnEnv.txt
# 把 #rootdev=PARTUUID=3f9b6268-02 改回 rootdev=PARTUUID=3f9b6268-02
# 4. eMMC 网页点更新 → 重启正常进 SATA
大版本更新(在小版本流程基础上追加)
# 升级后若红灯/网口失联:
# 1. U 盘写入同版本飞牛镜像,U 盘启动设备
# 2. 确认分区
blkid
# 3. 挂载 eMMC boot 分区(按实际设备名调整)
mkdir -p /mnt/emmc_boot
mount /dev/mmcblk0p1 /mnt/emmc_boot
# 4. 检查并修正 fnEnv.txt 里的 kernelfile / fdtfile
cat /mnt/emmc_boot/fnEnv.txt
ls /mnt/emmc_boot/ # 对照实际存在的 vmlinuz-* / *.dtb
# 5. 从 U 盘启动分区补齐匹配新版本的内核与 DTB
# 确保 fnEnv.txt 指向的文件真实存在
# 6. 恢复 rootdev 指向 SATA,卸载、断电重启
umount /mnt/emmc_boot
六、避坑要点
- 注释 rootdev 的时机要早:要在点更新之前就注释好,让重启能切到 eMMC。更新过程中再改,只影响下次引导目标,阻止不了 boot 分区被写。
- 小版本也要两边各升一次:SATA 升完切 eMMC 再升,保证两边版本对齐,否则后续切换会出问题。
- 大版本别硬闯:如果更新说明明确提到内核/trim 变化,提前准备好 U 盘启动盘,别等红灯了才找 U 盘。
- 升级前先备份:PG 注册表(App 登记)、App 套件、用户配置、SSH 密钥、machine-id,缺了会导致 App 列表清空或 SSH 指纹变化。
- 改完 fnEnv.txt 要确认文件末行有换行:某些引导对末行无换行敏感,保存后可用
tail -c1检查。
本文整理自 OES 迁移 SATA 后的实际 OTA 操作经验。涉及分区、引导和系统更新的操作有风险,执行前请确认已理解流程并做好备份;不同设备批次和固件底包的启动参数可能不同,操作时以本机 fnEnv.txt 实际内容为准。

💬 评论区 0