👁 1933

这个机器是群友让改的,问我收不,手上刚好没这个平台顺便收回来。好几个月了,今天拿出来刷顺便记录一下,之前也发了拆机刷机视频在 B 站等平台。

🖥️ 本机配置:MTK mt7986a(Filogic 830,四核 A53)· 2G 内存 + 128G eMMC · 双 2.5G 口 + 5 口千兆 · 带 M.2 接口 · 原厂跑 PCDN。对应型号 S20P。

刷机不会开 SSH 的,就直接 TTL 救砖方式刷入 uboot 即可。

刷入最新的 uboot 这个 uboot 理论都通用,各个 S20 系列:S20 即 S20P,后面越出来越阉割了——S20L 阉割双 2.5G,S20M 阉割 WiFi 和 2.5G。

S20 系列对比

所有东西一目了然了。


📥 工具与固件下载

所有 S20P / S20L / S20M 相关的 fip uboot、固件、工具,统一收集在网盘自取。其中第三方 fip uboot 本站已放直链,可直接下载(免网盘):

🗂️ 超级路由器 S20 系列 网盘目录

文件说明下载
mt7986_clx_s20p-2g-emmc-fip.bin第三方 fip uboot(S20P / 2G+128G / eMMC 版)站内直链
MD5SUMS校验和(下载后务必核对)查看
ℹ️ 这个 fip 是什么
里面是 TF-A BL31 + U-Boot 2023.07(2025-04 构建),板型 mt7986a-clx_s20p,EMMC_BOOT 引导。刷入后开机会进 U-Boot 自带的 Web 刷机界面(BL2 / GPT / FIP / Firmware 四页),S20 全系通刷。

md5: 52653da34bd4ad3c6e914591b9ff7cf0(674,201 字节)

💡 觉得站内直链好用的,备份留一份到自己网盘;网盘目录里同时保留了同款文件。

⚠️ 别在路由器上直接 wget 下载!
原厂固件的 busybox wget / curl 都没编 TLS,跑 wget https://… 会直接报:
wget: SSL support not available, please install one of the libustream-.*[ssl|tls] packages…

原机也不可能为这事去装一堆 opkg 包(缺源、缺依赖、折腾半天)。
正确做法:在电脑上下载好文件,再传进路由器——插 U 盘用 cp,或者开了 SSH 之后用 FTP/SFTP 客户端(WinSCP、FileZilla、Xftp 都行)拖进去。传完照第 4 节往下刷,效果完全一样。


🧭 整体刷机流程

┌──────────────────────────────────────────────────────────┐
│  ① 通电进系统  →  ② 开 SSH / TTL 登录                    │
└──────────────────────────────────────────────────────────┘
                         ↓
┌──────────────────────────────────────────────────────────┐
│  ③ 备份原系统分区到 U 盘 / 外挂 SSD                       │
│     ⚠️ 不要写到 /tmp!(/tmp 是 RAM tmpfs,会爆内存)         │
└──────────────────────────────────────────────────────────┘
                         ↓
┌──────────────────────────────────────────────────────────┐
│  ④ md5sum 验证 fip 文件 → 写入 fip 分区(uboot)            │
└──────────────────────────────────────────────────────────┘
                         ↓
┌──────────────────────────────────────────────────────────┐
│  ⑤ 重启进 uboot-web (192.168.1.1)                         │
│     刷 GPT 大分区 → 刷 kernel → 刷 rootfs                 │
└──────────────────────────────────────────────────────────┘
                         ↓
┌──────────────────────────────────────────────────────────┐
│  ⑥ 启动后 cfdisk 重建大分区 → mkfs.ext4 → 挂载            │
└──────────────────────────────────────────────────────────┘
                         ↓
                    ✅ 完成

上面是文字版,下面这张图把三步主流程 + 备份/救砖旁路一次画清楚,照着走就行:

S20 系列刷机流程图:telnet 在线刷 fip → uboot web 刷固件
S20 系列刷机流程:① telnet 登录 → ② 开 SSH / 在线刷 fip → ③ uboot web 刷固件。左侧标了备份与救砖旁路。
⚠️ 免责声明
资料来源网络。本站不对刷机失败 / 变砖 / 数据丢失负责,请自行斟酌是否使用。
强烈建议先准备好 USB 转 TTL 救砖线,再开始刷机。

1️⃣ 登录设备:telnet 直接用,也可以开 SSH

这台机器原厂默认就开了 telnet,开机连上直接用,不需要先开 SSH 也能刷。想用 SSH(配合 FTP/SFTP 客户端传文件更方便)就按下面开一下 dropbear:

系统启动后按回车,TTL 登录 root 账号,开启 dropbear 服务:

# 方式 A:telnet 直接进(原厂默认开启,无需任何配置)
telnet 192.168.8.1
# 账号 root,密码 tty996icu

# 方式 B:开 SSH(可选)
uci set dropbear.@dropbear[0].enable='1'
uci commit dropbear
/etc/init.d/dropbear restart

之后用 SSH 软件登录即可:

  • 地址:192.168.8.1
  • 端口:22
  • 账号:root
  • 密码:tty996icu

2️⃣ 了解原厂分区表

刷机前先查看分区分布。我们要做的是:先写入第三方 fip uboot,然后通过 uboot 的 web 界面写入固件到 kernel 和 rootfs,这样就可以正常启动了。

分区起始扇区结束扇区大小名称说明
181929215512 KiBu-boot-envuboot 环境分区,刷入 fip 时它会跟随变化
29216133112 MiBfactory原厂 MAC、WiFi 无线校准分区 ⚠️ 一定要备份
313312174072 MiBfipuboot 分区
4174088294332 MiBkernel固件内核
5829441131519512 MiBrootfs固件分区(系统空间)
61131520239599582~113 GiBpermanent_configPCDN 数据 / 缓存大分区,原厂默认挂 /permanent_config,备份就写这
🔍 分区实测
blkid 实测:p5 = squashfs(rootfs)、p6 = ext4(PARTLABEL="permanent_config")。刷前自己也跑一遍 blkid / lsblk 对一下。

💾 关于 rootfs 大小
原机 rootfs 只有 512 MiB,如果后期想多装插件又不想折腾路径映射,建议先刷支持大分区的 GPT(1G、2G 或 emmc 全用)。
不怎么装插件、把 Docker 都移到后面大分区的,可以不管它,反正更新也简单——刷下面 uboot,在 GPT 选项里选对应分区即可,刷完后大分区需要重新创建并格式化挂载。

3️⃣ 备份原厂分区(务必备份 factory!)

3.0 先停 Docker、清掉 p6 上的 PCDN 残余数据(腾空间)

原厂的 p6 数据区常年跑 PCDN(yfcloud 之类),会塞满一堆缓存碎片。备份前先把 Docker 停了,再把这块清干净,既腾出空间也顺便把残余清掉:

# 1) 停掉 Docker(原厂拿它跑 PCDN 容器)
/etc/init.d/dockerd stop

# 2) 确认已停
/etc/init.d/dockerd status
ps | grep -c dockerd

# 3) 清空 p6 数据分区上的残余(⚠️ 会清掉这一整块,确认没要留的东西)
rm -rf /permanent_config/*

# 4) 再看一眼空间,应该释放出来一大截
df -h /permanent_config
⚠️ rm -rf /permanent_config/* 是清空整块 p6 数据分区,只在你确定里面没有需要保留的东西时执行。想留 PCDN 里的东西就先按 3.3 打包出来再清。
⚠️ 重要:不要把备份写到 /tmp!
路由器的 /tmp 是内存 tmpfs,rootfs 备份 (512 MiB) 会瞬间塞爆 RAM 导致 OOM 重启。

正确做法:直接写到设备自带的 p6 数据大分区,原厂系统默认挂在 /permanent_config/(这块就是 PCDN pcnd 缓存那块 100G+ 的大盘)。
刷入第三方 OpenWrt 后,同一个分区的设备名变成 /dev/mmcblk0p6,一般会自动挂载成 /mnt/mmcblk0p6,到时候 cp 出来就行。

3.1 备份路径说明

# 直接看 p6 数据区挂在哪、还剩多少空间
df -h /permanent_config
ls -ld /permanent_config

# 原厂系统下它就是挂载好的,不需要自己挂 U 盘(空间不够的再外挂)
# 刷入第三方 OpenWrt 后,同一块分区一般挂成:
#   /mnt/mmcblk0p6
# cp 出来即可:
#   cp -a /mnt/mmcblk0p6/mmcblk0p*.bin /你的存储/

3.2 备份所有关键分区到 p6 数据区(/permanent_config/)

BAK=/permanent_config

# 各分区备份(直接落到 p6 数据大分区,空间足够)
dd if=/dev/mmcblk0p1 of=$BAK/mmcblk0p1_u-boot-env.bin conv=fsync
dd if=/dev/mmcblk0p2 of=$BAK/mmcblk0p2_factory.bin conv=fsync   # ⚠️ 务必备份
dd if=/dev/mmcblk0p3 of=$BAK/mmcblk0p3_fip.bin conv=fsync
dd if=/dev/mmcblk0p4 of=$BAK/mmcblk0p4_kernel.bin conv=fsync
dd if=/dev/mmcblk0p5 of=$BAK/mmcblk0p5_rootfs.bin conv=fsync

# 整盘前段(含 GPT 头 + boot0),一起留一份
dd if=/dev/mmcblk0boot0 of=$BAK/boot0_bl2.bin conv=fsync
dd if=/dev/mmcblk0 bs=512 count=34 of=$BAK/mmcblk0_GPT.bin conv=fsync

# 列出备份产物核对
ls -lh $BAK/mmcblk0p*.bin $BAK/boot0_bl2.bin $BAK/mmcblk0_GPT.bin

3.3 备份 PCDN 缓存内容(可选,量很大)

# 先清掉 yfcloud 大缓存(可省几十 G 空间)
rm -rf /permanent_config/watcher_data/yfcloud-*/storage/.yfnode/cache/*

# 缓存内容打包到别处(不要写 /tmp!)
tar -czvf /mnt/mmcblk0p6/permanent_config_cache.tar.gz /permanent_config/watcher_data

# 如需还原:
# tar -xzvf /mnt/mmcblk0p6/permanent_config_cache.tar.gz -C /

3.4 还原 kernel + rootfs 到原厂(应急用)

⚠️ 写回前先用 blkid / lsblk 确认目标设备,千万不要写错分区。
# 先确认 PARTLABEL 解析对的设备
blkid -t PARTLABEL=kernel
blkid -t PARTLABEL=rootfs

# 确认无误再写回
dd if=/permanent_config/mmcblk0p4_kernel.bin of=$(blkid -t PARTLABEL=kernel -o device) conv=fsync
dd if=/permanent_config/mmcblk0p5_rootfs.bin of=$(blkid -t PARTLABEL=rootfs -o device) conv=fsync
sync

4️⃣ 刷入第三方 fip uboot

✅ 正确姿势:电脑下好,再传进机器(二选一)
A. 插 U 盘(最稳,推荐):电脑上下载 mt7986_clx_s20p-2g-emmc-fip.bin → 拷进 U 盘 → U 盘插路由器 → cp /mnt/usb/… /permanent_config/,从第 4 步开始刷。
B. 开 SSH 后用 FTP/SFTP 传入:按第 1 节 uci set dropbear… 把 SSH 开起来,然后用 WinSCP / FileZilla / Xftp 这类客户端连 192.168.8.1:22,直接把文件拖到 /permanent_config/。图形界面拖拽,比命令行省事。

两种方式传完都从第 4 节的 md5 校验往下走。

本站提供 mt7986_clx_s20p-2g-emmc-fip.bin(S20P / 2G 内存 / eMMC 版),可直接从前面表格里的站内直链下载,也可以走网盘。S20L / S20M 请选对应型号的 fip(不要跨型号刷)。

⚠️ fip 是启动核心,刷错就变砖!必须先:
  1. 核对文件名是否对应你的型号(S20P / S20L / S20M)和内存类型(emmc / nand)
  2. 用 md5sum 校验下载的文件完整性
  3. 确认目标分区设备是 p3 (fip),不要写到别的分区
# ── 第 1 步:把电脑下好的文件传进机器 /permanent_config/ ──
# 方式 A:U 盘(推荐)
#   电脑上把 mt7986_clx_s20p-2g-emmc-fip.bin 拷进 U 盘 → 插路由器
lsblk                                   # 看 U 盘是哪个设备(一般是 sda1)
mkdir -p /mnt/usb && mount /dev/sda1 /mnt/usb
cp /mnt/usb/mt7986_clx_s20p-2g-emmc-fip.bin /permanent_config/
umount /mnt/usb

# 方式 B:开了 SSH 之后,用 FTP/SFTP 客户端拖进去
#   主机 192.168.8.1  端口 22  协议 SFTP  账号 root  密码 tty996icu
#   目标目录 /permanent_config/
#   (WinSCP / FileZilla / Xftp 均可,图形界面直接拖拽)

cd /permanent_config

# ── 第 2 步:校验(md5 必须等于 52653da34bd4ad3c6e914591b9ff7cf0)──
md5sum mt7986_clx_s20p-2g-emmc-fip.bin
ls -l  mt7986_clx_s20p-2g-emmc-fip.bin    # 应为 674201 字节

# ── 第 3 步:确认 fip 分区设备(应为 /dev/mmcblk0p3)──
blkid -t PARTLABEL=fip
lsblk

# ── 第 4 步:写入 fip 分区(走 PARTLABEL,防设备名漂移写错)──
dd if=mt7986_clx_s20p-2g-emmc-fip.bin \
   of=$(blkid -t PARTLABEL=fip -o device) conv=fsync
sync

# ── 第 5 步:再核一次源文件 md5 ──
md5sum mt7986_clx_s20p-2g-emmc-fip.bin
注意:直读分区 md5 可能和文件 md5 不完全一致(分区尾部填充),重点是写入过程没报错且 dd 完成。

4.1 另一种写法:在 uboot Web 界面里写 FIP

原机 dd 那步做不了、没做成,或者以后想换一版新 uboot,都可以直接在 uboot 的 Web 界面里刷 fip。这个界面的 UBOOT 页,上传的就是 fip 文件(也就是 uboot 本体)。

  1. 让路由器进 uboot:按住 reset 键上电,等 SYS 灯闪烁转常亮,电脑网线插 LAN 口
  2. 浏览器打开 http://192.168.1.1
  3. 点顶部导航的 UBOOT 页
  4. 选 mt7986_clx_s20p-2g-emmc-fip.bin → 点上传
  5. 界面会显示进度条和 MD5,核对无误后自动写入,写完全自动重启
⚠️ 这里刷的是 uboot 自己,写坏了连 uboot 都没了,只能靠 USB-TTL 串口救回来。
所以:文件必须先 md5sum 校验通过再刷,中途别断电。

什么时候用这条:① 原机系统里刷 fip 失败 / 手头没 telnet;② uboot 要升级到更新版本;③ 想恢复成官方 uboot。


5️⃣ 通过 uboot Web 界面刷固件

fip 写完重启路由器即进入 uboot。

  1. 网线插到 LAN1 ~ LAN5 任一口,电脑设置静态 IP 192.168.1.123/24,网关 192.168.1.1
  2. 按住 reset 键给路由器上电
  3. 等 SYS 灯由闪烁变常亮即可松开 reset 键
  4. 浏览器打开 http://192.168.1.1 进入刷机界面
💡 最新版 uboot 已支持 DHCP,电脑可以不设静态 IP,自动拿到 192.168.1.x 即可访问。

进入 uboot-web 后,对应文件刷对应位置,千万不要错刷:

uboot 选项对应文件类型说明
固件升级 / Firmware整体固件 .bin刷 OpenWrt / qwrt 整包
GPT 分区*-gpt.bin改变分区布局(1G / 2G / emmc 全用)
BL2*-bl2.bin底层引导,一般不用动
UBOOTmt7986_clx_s20p-2g-emmc-fip.bin写 fip(uboot 本体),就是第 4.1 节那页;一般不用再刷
initramfs*-initramfs.bin临时启动系统,不进 flash,用于救砖/试机
simg*.simg整机镜像,按需使用

6️⃣ 重建大分区(cfdisk + mkfs)

如果刷了 GPT 大分区文件,启动后需要把后面的大分区重新建出来并格式化。我个人喜欢最简单的 cfdisk 方式:

# 进入 cfdisk
cfdisk /dev/mmcblk0
# 按界面提示:
#   - 删除不要的分区(如 p6 permanent_config),或在它基础上重划
#   - 新建一个大分区占满剩余空间(编号一般还是 p6)
#   - 写入 (Write) → 确认 yes → 退出 (Quit)

分区情况:

  • 保留原机布局时,要格式化的是 p6(permanent_config)
  • 删掉 p6 后新建一个大分区,编号也还是 p6,直接 mkfs 即可
⚠️ 格式化前用 lsblk 确认分区已被卸载(MOUNTPOINTS 列为空),挂载中的分区严禁直接 mkfs,会损坏正在运行的系统。
# 1) 二次确认:分区存在 + 未被挂载
lsblk

# 2) 如果有挂载,先卸载
umount /dev/mmcblk0p6 2>/dev/null || true

# 3) 格式化(按实际分区号改 6 / 7)
mkfs.ext4 -F /dev/mmcblk0p6

# 4) 挂载到系统目录(按需改)
mkdir -p /mnt/data
mount /dev/mmcblk0p6 /mnt/data
df -h /mnt/data

# 5) 写入 /etc/fstab 实现开机自动挂载(可选)
echo "/dev/mmcblk0p6  /mnt/data  ext4  defaults  0 2" >> /etc/fstab

✅ 命令安全清单(重要)

  • ✅ 备份写到 /permanent_config/(p6 数据大分区),不要写 /tmp(RAM 会爆)
  • ✅ 动手前先 /etc/init.d/dockerd stop 停 Docker,再 rm -rf /permanent_config/* 清掉 PCDN 残余腾空间
  • ✅ 写 fip / kernel / rootfs 之前 md5sum 校验文件
  • ✅ 用 blkid -t PARTLABEL=xxx 而非硬编码 /dev/mmcblk0pN,防止设备名漂移
  • ✅ dd 命令带 conv=fsync,完成后 sync 一次确保落盘
  • ✅ mkfs 前先 lsblk + umount 确认目标空闲
  • ❌ rm -rf /permanent_config/* 会清空整块 p6,只在确认无保留价值时执行
  • ❌ 原机 wget/curl 不带 TLS,别在机器上直接 wget https://…;文件用电脑下好,走 U 盘或 FTP 传进去
  • ❌ factory 分区一定要备份(MAC 和 WiFi 校准信息),否则将来可能无法还原
  • ❌ 没有 USB-TTL 救砖线就开始刷 fip,等于裸奔,强烈不推荐

🔗 相关资源