Yi 云蚁 b091qp 摄像头救砖教程:分区备份 + reset 按钮法(yi-hack 刷砖处理)

其实这台摄像头在今年 3 月份的时候就不慎刷成砖了,当时反复研究都没能救回来,只能搁在一边落灰许久。直到最近村里有些事需要调监控,结果又碰上另一台摄像头无法识别内存卡的状况,回放也看不了。

今天下单了一台说得过去的品牌摄像头,就想着还是看看能不能把这台刷坏的救回来——哪怕就当个红灯亮着的摆设也好。于是决定试试:不拆硬件、不焊接的前提下能不能修好。

由于访问仓库的网络卡得转圈圈,且仓库文档又全是英文的,干脆将仓库地址丢给 AI 进行分析,按它给的命令一条一条跑,没想到真的就成了。

家里人几年前买的一个云蚁物联解决方案的 Wi-Fi 摄像头,断断续续用着,当初忍不了 App 的广告,就想着开放 RTSP 直播流,假装以后可以接入 NVR。为此不断查找教程,看到了一众 yi-hack 的仓库。

结果刷机时固件型号没对上,期间为了救砖又连续尝试过别的固件,摄像头最后还是起不来——App 掉线、无法开机自检、红外线灯珠不亮。按当时看到的教程拔卡重启也无效,要不是黄灯还有微亮,我都怀疑彻底坏掉了。

撇在那里几个月,一度以为得等我把硬件维修技术练上来再修。

这不今天突发奇想,想着能不能试试修复。网络卡顿又看不懂英语,就干脆把搜到的仓库地址扔给 AI 翻译分析。

最后靠刷机前脚本自动 dump 下来的分区备份 + 一张 SD 卡 + 一个 reset 按钮把它救回来了,现在 App 能正常连上,红外夜视也恢复了。下面是完整的操作步骤、踩过的坑和参考链接,给遇到同样情况的朋友当个参考。

目录

1. 背景与症状

一台”云蚁物联”的 Wi-Fi 摄像头,当初为了开放 RTSP 直播流,想刷 yi-hack 开启 RTSP 功能。结果:

  • 第一次刷错固件 → 黄灯长亮、起不来
  • 拔 SD 卡重启 → 无效(坏的是 flash,不是卡)
  • 又放了”其他固件”进去试图救 → flash 被污染两轮
  • App 显示掉线几个月,红外夜视、云功能全挂
关键认知:yi-hack 这类 hack 正常是”全在 SD 卡上,拔卡恢复原厂”。但如果你第一次刷机时型号没对上,SD 卡的刷写流程已经把坏镜像写进了 flash 的 backup 分区——这时拔卡就救不回来了,必须重新写回 flash。

2. 判断机型(b091qp)

救砖的第一步是确认机型,因为不同机型的flash 分区表不一样,写错偏移 = 砖上加砖。从之前刷机时的备份目录能看到:

homever.txt :  9.0.41.99_202108051748
mtd.txt     :
  mtd0: 00060000 00001000 "uboot"
  mtd1: 001f0000 00001000 "boot"
  mtd2: 00120000 00001000 "rootfs"
  mtd3: 00300000 00001000 "home"
  mtd4: 00150000 00001000 "backup"
  mtd5: 00020000 00001000 "env"
  mtd6: 00010000 00001000 "mfg"
  mtd7: 00010000 00001000 "conf"

固件 9.0.41 对应 yi-hack-Allwinner-v2 的 b091qp 机型(云蚁物联 / 一批白牌摄像头同平台)。backup 分区 0x150000 = 1392640 字节,起始偏移 0x670000。后面所有参数都锚定在这套分区表上。

3. 准备救砖素材(分区备份)

幸运的是,刷机前按流程 dump 过完整的分区备份,目录长这样(相对路径):

~/workspace/backup/
├── homever.txt      # 固件版本
├── mtd.txt          # 分区表
├── mtdblock0.bin    # uboot   393216 字节
├── mtdblock1.bin    # boot    2031616 字节
├── mtdblock2.bin    # rootfs  1179648 字节
├── mtdblock3.bin    # home    3145728 字节
├── mtdblock4.bin    # backup  1376256 字节  ← 救砖核心
├── mtdblock5.bin    # env     131072 字节
├── mtdblock6.bin    # mfg     65536  字节
└── mtdblock7.bin    # conf    65536  字节

要还原的是 3 个:mtdblock2(rootfs)+ mtdblock3(home)+ mtdblock4(backup)。uboot/boot/env/mfg/conf 一律不动(动了就真砖了)。之所以 3 个一起还原,是因为两轮刷写很可能把 rootfs/home 也污染了,只还原 backup 的话校验过了但 rootfs 还是坏的,照样起不来。

没备份就麻烦了:如果你没有这套干净的分区 dump,软救砖这条路走不通,只能拆机接 UART 串口走硬救砖(需要 TTL-USB 工具)。有备份 + 有 SD 卡就还能靠软救砖,不用拆机。

4. 克隆仓库并放置备份

cd ~/workspace
git clone --depth 1 https://github.com/roleoroleo/yi-hack-Allwinner-v2
cd yi-hack-allwinner-v2/unbrick

# 把 3 个干净分区放进 b091qp 机型目录
cp ~/workspace/backup/mtdblock2.bin b091qp/
cp ~/workspace/backup/mtdblock3.bin b091qp/
cp ~/workspace/backup/mtdblock4.bin b091qp/

# build.sh 靠这个文件识别机型,内容就是机型名
printf 'b091qp' > b091qp/filename

5. 安装依赖

build.sh 依赖 mkimage(u-boot-tools)和 mkfs.jffs2(mtd-utils):

sudo apt install u-boot-tools mtd-utils

6. 打包救砖分区(factory 模式)

打包成 3 个 U-Boot 格式的分区镜像。这里最终用的是 factory 模式(直接拷贝原始分区,不走 jffs2 挂载):

cd ~/workspace/yi-hack-allwinner-v2/unbrick
sudo ./build.sh factory

# 核对 3 个 gz 大小(关键!)
ls -l b091qp/*.gz
# 预期:
#   rootfs_b091qp.gz  ~1104696
#   home_b091qp.gz    ~2970919
#   backup_b091qp.gz  ~1241855   ← 绝不能只有 2.5KB!

7. 第一个坑:hacked 模式因缺 mtdram 回退成 factory

一开始我跑的是 sudo ./build.sh hacked,结果报错:

modprobe: FATAL: Module mtdram not found in directory /lib/modules/6.1.0
umount: b091qp/mnt: not mounted.
### Updating b091qp/backup/init.sh
cp: 对 'b091qp/backup/init.sh' 调用 stat 失败: 没有那个文件或目录

原因:hacked 模式要先 mount.jffs2(靠 modprobe mtdram 模拟挂载)把 backup 分区挂出来改 init.sh、塞随机文件改 hash。但内核没有 mtdram 模块 → 挂载失败 → 脚本静默 fallback 成 factory 路径(直接 cp mtdblock4.bin)。所以第一次产出的其实是 factory 版,不是 hacked 版。

判断方法:看 build 日志。如果出现了 cp: 对 'b091qp/backup/init.sh' 调用 stat 失败,说明它走了 factory fallback。对我们的场景(救活,不是先跑 hack)这没影响——factory 版照样能把干净分区写回。想真正跑 hacked 模式,先 sudo apt install linux-modules-extra-$(uname -r) 装上 mtdram 再重跑。

8. 第二个坑:backup 分区打出 2.5KB 空壳

更要命的是,第一次 hacked 跑出来的 backup_b091qp.gz 只有 2589 字节:

-rw-r--r-- 1 root root    2589 11月 1日 20:30 backup_b091qp.gz   ← 坏!
-rw-r--r-- 1 root root 2970919 11月 1日 20:30 home_b091qp.gz
-rw-r--r-- 1 root root 1104696 11月 1日 20:30 rootfs_b091qp.gz

原因:jffs2 挂载失败 → mkdir -p b091qp/backup 建了个空目录 → create.jffs2 对空目录生成了一个全 0 pad 的空 jffs2 镜像(几 KB)→ 打包进去了。这要是写进 flash,backup 分区直接被擦成空白,比原来更糟。

教训:build 完一定核对 .gz 大小。backup 原始 1.37MB,gz 后至少 ~1MB;如果只有几 KB 就是空壳,绝对不能上卡。

修复:清掉坏产物,重跑 factory(factory 不走 jffs2 挂载,直接 cp,就避免了这个坑):

cd ~/workspace/yi-hack-allwinner-v2/unbrick
rm -f b091qp/backup_b091qp.gz b091qp/rootfs_b091qp.gz b091qp/home_b091qp.gz
sudo ./build.sh factory
ls -l b091qp/*.gz
# 现在 backup_b091qp.gz = 1241855 字节 ✅

9. 解压生成 3 个裸分区文件

bootloader 认的是裸分区文件(不带 .gz)。gunzip -k 会解压到 .gz 同目录:

cd ~/workspace/yi-hack-allwinner-v2/unbrick/b091qp
gunzip -k rootfs_b091qp.gz home_b091qp.gz backup_b091qp.gz
ls -l
# 得到 3 个裸文件:
#   rootfs_b091qp   1179712
#   home_b091qp     3145792
#   backup_b091qp   1376320
裸文件比原始 mtdblockX.bin 多 64 字节 = U-Boot mkimage 镜像头,正常。看到的大小对得上就 OK。

10. 写入 SD 卡(FAT32)

准备一张干净的 FAT32 SD 卡(最好先重新格式化,去掉之前 unbrick 的裸文件残留),把 3 个裸文件放到卡根目录:

# 假设 SD 卡挂到 /mnt/usb(换成你实际的挂载点)
sudo mount /dev/sdX /mnt/usb      # /dev/sdX 是 SD 卡,用 lsblk 确认
cp ~/workspace/yi-hack-allwinner-v2/unbrick/b091qp/rootfs_b091qp /mnt/usb/
cp ~/workspace/yi-hack-allwinner-v2/unbrick/b091qp/home_b091qp   /mnt/usb/
cp ~/workspace/yi-hack-allwinner-v2/unbrick/b091qp/backup_b091qp /mnt/usb/
sync
ls -l /mnt/usb/   # 应正好 3 个裸文件,无 .gz、无 bin、无目录

卡根目录最终结构:

/ (SD 卡根目录)
├── rootfs_b091qp    1,179,712
├── home_b091qp      3,145,792
└── backup_b091qp    1,376,320

11. 救砖操作:按 reset + 通电(关键!)

这是整个流程里最容易做错、也最决定成败的一步。

按 reset 通电才触发刷写模式。我试过的几种”不摁 reset”的方法(拔卡重启、先插卡再通电、放裸分区普通上电)都没让摄像头进刷写流程——但我不能断定是”bootloader 就是不读 SD 卡”,也可能是卡里有残留 hack 文件、时序不对、或别的因素。唯一我实际成功触发的动作,是按住 reset 再通电,之后摄像头才会读 SD 卡把 3 个分区写回 flash。所以照这个做就稳。

具体操作:

  1. SD 卡先插进摄像头
  2. 按住机身上的 reset 按钮不松手(一般是”线尾巴”/机身侧的小复位键)
  3. 在按住 reset 的同时给摄像头通电
  4. 保持按住 约 5 秒后松手(这次黄灯闪烁的时间明显比之前长,说明在写分区)
  5. 等 5–10 分钟,期间不要断电、不要拔卡
顺序记不住就按这个做:插卡 → 按住 reset → 再通电 → 数 5 秒松手。如果 10 分钟还没反应,可以把顺序反过来试一次(先通电 → 瞬间插卡 → 再按住 reset 断电重启),个别机器时序有差异。
误操作记录(留作参考):第一次操作时忘了先断电,3 个裸分区文件放进 SD 卡根目录后,没注意摄像头还通着电就插进去了,黄灯瞬间高亮——我立刻反应过来拔了电源。之后才”按住 reset 再通电”做正式操作。

关于”断电前那个高亮有没有用”——不确定。两种可能:
– 它只是普通上电时的正常自检高亮,跟 recovery 无关(更可能)
– 它可能是 bootloader 检测到 SD 卡内容后的一次”预校验”反应,为后面正式进 recovery 做了铺垫

不管哪种,正式救砖的关键动作始终是”按住 reset + 通电”这一步。如果你重试时遇到”普通通电有高亮但按 reset 通电没反应”的怪现象,可以把”高亮瞬间断电 → 再按 reset 通电”作为备选时序试一次。

但要警惕:如果此时 bootloader 已经开始读 SD 卡、往 flash 写分区(黄灯持续闪烁中),中途断电就等于恢复过程异常中断——分区只写了一半,flash 比没救砖前更难收拾。所以:
– 黄灯规律闪烁后,千万不要断电、不要拔卡,哪怕看到”好像写完了”也别急,让流程自己跑完
– 如果确实被强制断电了(断电前就断电、或者手滑),别慌、也别反复重试,先冷静判断:再完整跑一次”按 reset 通电”(让 bootloader 重新从头校验、重新写分区),多数情况下能救回来;如果反复断电后彻底没反应,就只能走 UART 硬救砖了

12. 成功标志与恢复确认

救砖成功的现象(我实际看到的):

  • 等待过程中黄灯规律闪烁(比之前常亮时长得多)—— bootloader 在读卡、写分区
  • 听到一声 “ling” 提示音,并伴随摄像头云台转动(PTZ 自检)
  • 手机 App 里那台掉线几个月的摄像头重新显示在线
  • 红外夜视灯也亮了

出现这些就说明 3 个分区都写回成功,系统完全恢复。

13. 后续

救砖只是把系统救活了——现在 App 能正常连上,红外夜视、云功能都恢复了。SD 卡里那 3 个裸分区文件已经完成使命,可以直接拔卡。

14. 踩坑总结(口诀)

  1. 先认机型:看 SN 前缀 + 固件版本 → 查支持表 → 锁定 flash 分区表(我的是 b091qp / 9.0.41)
  2. 备份是命根子:刷机前 dump 的 mtdblock4.bin(backup)是救砖唯一素材,没有就只能 UART
  3. 还原 3 个分区:rootfs + home + backup 一起写回,别只写 backup
  4. build 完核对 .gz 大小:backup 只有 2.5KB = 空壳(jffs2 挂载失败),不能上卡;重跑 factory 模式最稳
  5. bootloader 认裸文件:把 3 个不带 .gz 的裸分区放 FAT32 卡根目录
  6. 关键动作:按住 reset + 通电:普通开机不读卡,必须触发 recovery 模式(约 5 秒松手)
  7. 通电前先断电:插 SD 卡进摄像头前务必确认摄像头已断电;万一忘了断电就插卡、看到黄灯瞬间高亮,立刻断电,不影响后续正式操作
  8. 写入过程中别断电:黄灯开始规律闪烁(bootloader 正在写 flash)后,绝对不要断电、不要拔卡,让流程自己跑完;中途断电 = 分区写一半,比没救砖更难收拾
  9. 判断成功:黄灯规律闪烁 / “ling”声 / 云台转动 / App 恢复在线 / 夜视灯亮

15. 参考链接

  • 魔改固件仓库(含 unbrick 救砖目录):https://github.com/roleoroleo/yi-hack-Allwinner-v2
  • 救砖官方说明(unbrick/README.md):https://github.com/roleoroleo/yi-hack-Allwinner-v2/tree/master/unbrick
  • 救砖 Wiki(Unbrick the cam):https://github.com/roleoroleo/yi-hack-Allwinner-v2/wiki/Unbrick-the-cam

16. 后记

说起来,3 月份刷坏的时候,我一度打算买根 USB-TTL 线走硬刷救砖。当时盯着那几颗锈蚀的螺丝,还先喷了点除锈剂准备开盖,后来各种原因也没能拆开,更没去主板上看丝印、确认机型,这台摄像头就一直搁下了。

这不,今天看着那已经风干的除锈剂,还有跟螺丝对不上的螺丝刀,索性也打消了开盖的念头,决定先上网查查救砖教程,看看该怎么下手。好在网上有总结好的软刷机救砖教程——不拆机、靠分区备份写回就能救活。于是先按不拆机的路子试,没想到一次就成了。

再想想为什么当初会刷坏:这种”杂牌”摄像头难找官方技术支持,根本不知道去哪找原厂刷机固件;能找到的那几个刷机固件,也没一个明确说支持”用某某方案”的这款产品。当时我就是拼着外观描述的型号盲猜、下错固件包才出的问题。

好在那个刷机脚本自带备份操作,我当时折腾各个固件的时候,也先把导出的分区备份留了一份下来。今天再借助 AI 把仓库里的救砖教程捋一遍,才把它救了回来。所以想刷 yi-hack 的朋友,备份脚本跑完一定留好分区 dump、机型先查 SN/固件版本别瞎猜型号,这两步省了,后面省不回来。

免责:刷机/救砖有风险,操作前务必备份、自行核对机型与分区表,按自己设备情况判断。本文仅为个人实操记录,不构成通用保证。

ChiuYut

2026年11月01日

发布者

ChiuYut

咦? 我是谁? 这是什么地方? Ya ha! 我是ChiuYut! 这里是我的小破站!