用MiFlash给非小米设备“救砖”

如题所述

第1个回答  2022-07-26
准确地说是给ZUK Z2 Pro救砖。
Z2 Pro搭载了高通骁龙820+UFS,所以本文也适用于一些其他的骁龙平台手机。MiFlash里也有一些与MTK平台刷机有关的文件(SP Flash Tool、DA),同时支持fastboot线刷功能,这里没有测试。

Z2 Pro刷入AospExtended 6.7和OpenGApps后,安装Magisk失败,开机卡AEX Logo,且将Magisk创建的 boot 分区备份文件刷回手机也无法恢复。在TWRP下清除所有数据(Dalvik Cache、Cache、System、Data、Vendor),重新刷入AospExtended 6.7和OpenGApps正常,但是一旦安装Magisk问题就会重现。
(Z2 Pro没有使用 A/B分区 ,也没有使用 System-as-Root ,但是AEX 6.x由于是Android 9,因而可能是System-as-Root,刷机之前没有检查)

进9008模式,用QFIL刷ZUI,期望获得一个最原始的环境,从头开始。
结果QFIL死活不认手机,提示
Download Fail:Sahara Fail:QSaharaServer Fail:Process fail 以及
ERROR: function: sahara_rx_data:194 Unable to read packet header. Only read 0 bytes.
多次重启QFIL工具/电脑/手机均未果, adb reboot edl 之后紧接着 Start Download 也不行, 更换QPST/QFIL版本 也无效,同时也排除文件路径及 驱动签名 (设备管理器中没有感叹号/问号等异常情况)等原因,又不想用QSB卡刷,也不想用 LG K20 Plus的工具 ,于是尝试了网友推荐的 MiFlash 。

MiFlash刷机的基本流程见: http://www.shuajibang.net/news/detail/23780
MiFlash将Fastboot线刷、高通9008/QPST线刷、MTK SP Flash Tool线刷等功能合并进了一个简单的界面,用户只要选择刷机包,再选择设备,MiFlash就可以自动判断出刷机包类型,然后按照相应的方式刷机。因此,这里只需选择Z2 Pro的QPST线刷包,MiFlash根据一定条件(猜测是包内的XML文件)判断出是9008线刷包,并调用相应工具( QSaharaServer.exe )进行后续的刷写操作。
另外,MiFlash有自动重试功能,且超时/重试时间都相当短(超时小于1秒,重试间隔3秒左右,远低于QFIL的90秒),因此在 Only read 0 bytes. 的情况下MiFlash偶尔还能成功刷机。

然后说一下我踩到的两个坑:

Z2 Pro上的LUN与U盘的LUN更相似一些。Z2 Pro出厂时,其LUN 0是 /cache 、 /data 、 /sdcard 等允许用户随时修改的分区,LUN 4包含 /system 、 recovery 、 boot 等相对底层的分区,LUN 1和2是 xbl 分区。而剩下的LUN 3和5(包括LUN 4的 fsg 和 devinfo 等分区) 想必 包含设备的一些基本信息(IMEI、MEID、Wifi/蓝牙的MAC等),QPST线刷时不会刷写这些LUN/分区,而重新Provision会导致这些LUN和分区内的数据丢失,导致我需要从原来的备份里尝试恢复。 这里 有一个类似的案例,并包含详细的分区名称及作用。

MiFlash读取到 provision.xml 文件时,就一定会按文件指示将手机重新Provision,而如果文件格式不标准则会报错,如 XML 注释中不能包含“--”,并且“-”不能是最后一个字符。 第 1 行,位置 6。
这时 不建议 尝试按照错误提示去修改XML文件,而更应该尝试把该文件改名或删除,让MiFlash不要自作主张去重新Provision。如果重新Provision了,那么恭喜你,手机不会变砖,但是变成了平板。