watt(DCD) 刷机实操踩坑实录
2026-07-17 在 Linux + 公司 corplink 环境实操刷 watt 台架(ab876012,非熔丝 unlocked,user-root .D 包)的全过程。本机最终未刷成——卡在 edl V1.6 工具固有 bug + 公司网络阻断 github,但全部 7 道墙已定位到根因。下次换 Windows QFIL / 个人机 bkerler 可直接成功。
0. 环境与 ROM
- 设备:ab876012,watt / DCD / Qualcomm SA8295,非熔丝(
ro.boot.secboot=0)、unlocked(ro.boot.flash.locked=0,device_state=unlocked,verifiedbootstate=orange) - ROM:
watt_M_26.07.17.S.CN.D_1479_..._12_Uroot_IMAGES.zip(user-root,debug 签名,.D 包) - 解压后
watt_images/:ufs0/+ufs1/(双 UFS)+edl.sh/flashfastdual.sh/rawprogram_all.xml/patch_all.xml/prog_firehose_ddr.elf - 主机:Ubuntu + 公司 corplink(edlp 数据防泄漏)+ 公司网络(阻断 github)
1. 正确路径(官方,DCD/XCD刷机教程)
watt(8295) 只能走 EDL(9008):
- 金手指进 EDL + 关心跳:关台架电源 → 按住金手指按钮 → 上电 → 保持 5s+ 松开 → 设备进
05c6:9008+ MCU 自动关闭心跳(40 分钟窗口) lsusb见05c6:9008→ 进watt_images/→sudo ./edl.sh -f(刷 ufs0 + ufs1)- 断电重新上电
2. 踩坑实录(按遇到顺序)
坑 1:fastboot 路完全不可行(8295 心跳)
- 想走
flashfastdual.sh(fastboot 双UFS),但 8295 心跳只能金手指关:setprop persist.soc_heartbeat_switch false设了 reboot 后 prop 丢失(8295 不认这个 prop,那是 8650/XCD 的) - release MCU 心跳 60s 超时 → 刷
system_la.img.sparse(916MB)中途 MCU 重启 SoC → 刷失败/变砖 - 依据:
SOC心跳超时60秒方案评估.md明确”reset -f/fastboot 刷机会失败” - 结论:8295/watt 别想 fastboot,老老实实 EDL
坑 2:sudo: ./edl.sh:找不到命令
- ROM 解压后
edl.sh权限-rw-rw-r--(丢了 +x) - sudo 对无执行权限的命令报”找不到命令”(误导)
- 解法:
chmod +x edl.sh flashfastdual.sh
坑 3:/dev/bus/usb 节点文件名与 devnum 错位
- 多次 adb/fastboot/9008 切换让 devnum 累积,udev 残留旧节点:
/dev/bus/usb/001/019(minor=18)占着文件名 019,真 9008(devnum19,minor19)被迫待在 020 - edl 按 devnum 标准路径
/dev/bus/usb/001/019open → 开到残留 devnum18 →device not found - 部分解法:
sudo mknod -m 660 /dev/bus/usb/001/019 c 189 19(覆盖残留)。但重新金手指(设备重新上电枚举)更干净
坑 4:edl V1.6 搜索 bug(致命,工具固有)
- strace 实锤:
edl只openat(/sys/bus/usb/devices/1-12/idProduct)(读到 9008),没读 idVendor、没 open 任何/dev/bus/usb,直接device not found - 重新金手指(USB 全新枚举)+ claim 干净(pyusb 能 claim)+ 单设备 都不解决 → 证明是 edl V1.6 二进制里的 9008 搜索逻辑 bug,与设备/环境无关
- 修不了(二进制),只能换工具
坑 5:内核驱动占 interface 0(USBError 16 Resource busy)
- pyusb
claim_interface(dev,0)报 busy,root 也不行,authorized 重置不清 is_kernel_driver_active(0)=True,detach_kernel_driver(0)后 claim OK- 奇怪点:
/sys/bus/usb/devices/1-12/1-12:1.0/driver显示”无”(内核 quirk,驱动绑了但符号链接没建) - 解法:重新金手指(设备重新上电)清掉了这个占用;代码里
detach_kernel_driver绕过
坑 6:corplink 误判 + 停了断网
- claim busy 时怀疑 corplink edlp 拦 USB(DLP 特征:lsusb 能读描述符但 claim/bulk 被拦)
- 停 corplink(
systemctl stop+pkill corplink-uc)后 claim 还 busy → corplink 清白(真元凶是坑 5 的内核驱动) - 副作用:corplink 停了断了公司网络认证 → pip 连不上 PyPI → 启回 corplink 恢复
- 教训:corplink 和 USB claim 无关,别轻易停(停了断网 + 合规风险)
坑 7:bkerler/edl 装不上(github 公司阻断)
- 想换开源 bkerler/edl(自动 detach kernel driver + claim + firehose,专为高通 9008)
pip install edl-client→ PyPI No matching distribution(bkerler/edl 不在 PyPI)git clone github.com/bkerler/edl(含 —depth 1)→ 70s 超时 → 公司网络阻断 github- 结论:本机装不了 bkerler/edl
3. 本机刷不通的根本原因(一句话)
USB 硬件完全 OK(claim 干净),纯粹卡在 Linux 工具链:edl V1.6 固有搜索 bug(二进制修不了)+ 公司网络阻断 github(bkerler 装不上)= 没有能用的刷机工具。
4. 下次怎么成功
按推荐度排序:
- Windows QFIL + 小米汽车 PC 刷机鉴权工具(官方推荐,绕过所有 Linux 坑)
- 见
DCD与XCD刷机教程.mdWindows 节 +小米座舱PC刷机鉴权工具v2.0-使用说明.md - 要先申请账号权限(
小米汽车PC刷机鉴权工具-账号权限申请.md)
- 见
- 个人机 / 无 corplink 无公司网络的机器:
pip install git+https://github.com/bkerler/edl.git能装上 →edl --firehose prog_firehose_ddr.elf flash ...(本机已证 USB claim OK,bkerler 能 open 9008) - 离线 bkerler:在能联网的机器上
pip download edl-client(或 clone bkerler/edl + 依赖 wheel),打包拷到本机pip install --no-index --find-links=./wheels edl-client - 修 edl V1.6:逆向定位搜索 bug(读 idProduct 后没读 idVendor / 没算 devnum→节点路径),patch 二进制;或向上游反馈要新版
5. 关键命令备查
# 非熔丝/unlocked 判断(8295 用 secboot)
adb shell getprop ro.boot.secboot # =0 非熔丝
adb shell getprop ro.boot.flash.locked # =0 unlocked
# 进 EDL(金手指物理):关电→按住金手指→上电5s+→松开
lsusb | grep 9008 # 见 05c6:9008 = 进 EDL
# 刷机(edl.sh 自带 TOPDIR,会自己 cd ufs0/ufs1)
cd watt_images && sudo ./edl.sh -f
# USB 可访问性验证(pyusb,判断是工具bug还是USB问题)
python3 -c "import usb.core,usb.util; d=usb.core.find(idVendor=0x05c6,idProduct=0x9008); \
print('found',d is not None); usb.util.claim_interface(d,0); print('claim OK')"
# 节点错位排查(文件名应==minor==devnum)
ls -la /dev/bus/usb/001/
# claim busy 时 detach 内核驱动
python3 -c "import usb.core; d=usb.core.find(idVendor=0x05c6,idProduct=0x9008); \
d.detach_kernel_driver(0) if d.is_kernel_driver_active(0) else None"6. 给刷机工具改造的输入(car_rom_worker.py)
当前工具只认 flash_all.sh(XCD/ampere/newton),watt/DCD 双UFS 包没有。改造要点:
- 识别 DCD/watt 包:检测
watt_images/或edl.sh+flashfastdual.sh+ufs0/ufs1 - 分流到 EDL 流程:金手指进 9008(提示用户物理操作)→
sudo ./edl.sh -f - 不能套用 fastboot 流程(关心跳→adb reboot bootloader→flash_all.sh),8295 走不通
- 8295 心跳:金手指进 EDL 自动关,工具只需提示”40 分钟窗口”
- 节点错位 / kernel driver 占用:工具内
detach_kernel_driver或提示重新上电