准备工作

原厂线刷固件

从百度网盘下载完整的 Y927 线刷包 (PD1410V_A_1.22.1):

1
2
3
4
5
6
7
8
9
10
关键文件:
├── boot.img (10 MB) ← 原厂内核+ramdisk+QCDT
├── prog_emmc_firehose_8916.mbn ← vivo 签名 firehose (EDL用)
├── 8916_msimage.mbn ← Sahara programmer
├── rawprogram_unsparse.xml ← EDL 分区映射
├── fastboot_flash_all.bat ← 官方刷机脚本
├── NON-HLOS.bin ← 基带固件
├── emmc_appsboot.mbn ← aboot (bootloader)
├── sbl1.mbn, rpm.mbn, tz.mbn, hyp.mbn ← 引导链组件
└── system_*.img, userdata_*.img ← 系统/用户数据

下载地址:https://pan.baidu.com/s/1slG5aqD

EDL (Emergency Download Mode)

Qualcomm SoC ROM 固化的底层刷机模式,优先级高于一切引导链。

Android 系统的启动路径

  1. 通电
  2. PBL: Primary Boot Loader,固化在 SoC 内部 ROM 里的第一段代码,出厂烧死后无法修改。不在eMMC里,在MSM8916 SoC芯片内部,因此不可能刷坏。
  3. 检测EDL触发条件,如果触发则进入9008/EDL模式,此时可以直接写eMMC裸扇区进行刷机
  4. 如果没有触发EDL,则走常规的启动路径

Android系统常规的启动路径如下

  1. 在EDL未触发之后,启动SBL1(Secondary Boot Loader)
  2. TZ
  3. hyp
  4. aboot分区(Android Bootloader),这是fastboot模式所在分区,用于提供fastboot刷机模式和正常启动加载/验证boot分区
  5. boot 分区,包含了kernel/DTB/initramfs
  6. kernel启动后,加载initramfs到内存里,里面包含了Linux内核启动后加载的第一段用户空间程序init(这就是那个PID=1的init进程)
  7. init 程序将准备好硬件,加载驱动模块(GPU 固件、屏幕驱动、触屏驱动、…),找到真正的系统盘, eMMC/SD,按 UUID 匹配 rootfs 分区,挂载,然后 switch_root 继续启动
  8. switch_root 将彻底替换根目录,一把 initramfs 整个卸掉,新系统接管一切(注意,驱动的.ko内核模块被加载后是在内核态,initramfs是在用户态的,被卸载后并不干扰已加载好的内核驱动)

EDL vs fastboot

EDL (9008) fastboot
谁提供的 SoC ROM 固化代码 bootloader (aboot/lk1st)
能写 GPT ✅ 裸扇区写入 ❌ 依赖 GPT 才能定位分区
变砖还能用 ✅ TP 短接强制进入 ❌ bootloader 挂了就没了
USB VID/PID 05c6:9008 18d1:d00d
协议 Qualcomm Firehose (Sahara握手) Android Fastboot

进入 EDL 模式

  • 从fastboot模式进入EDL

    1
    fastboot oem reboot-edl
  • 硬件方式启动,当fastboot被刷坏变成深度砖时,需要使用这种方式,不同手机进入方式不同,Y927需要拆机,然后音量/电源键排线下方有两个金属触点,在USB接通时短接它电脑即可识别到一个9008设备。

电脑环境准备

我这里使用的是 VMWare 虚拟机中安装的 Ubuntu 24.04 作为刷机系统,USB 设备映射到 VMWare 虚拟机内部

安装基础工具

1
sudo apt install -y git python3-dev google-android-platform-tools-installer

UV/UVX

Python 的包管理器和脚本运行器,用 Rust 写的,替代 pip + venv + pipx。

安装

1
2
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env

UVX 可以直接执行任意Python生态的工具,直接跑就行了,不需要任何安装,它会按需自动安装,比如运行后面的EDL刷机程序

1
uvx --from git+https://github.com/bkerler/edl.git edl -h

刷机前的备份工作

原厂分区表

分区 mmcblk0 大小 用途
modem p1 64 MB 基带固件 ⚠️
sbl1/bak p2/p3 512 KB Secondary Bootloader
aboot/bak p4/p5 5 MB Bootloader
rpm/bak p6/p7 512 KB Resource Power Manager
tz/bak p8/p9 512 KB TrustZone
hyp/bak p10/p11 512 KB Hypervisor
pad p12 1 MB 填充
modemst1/2 p13/p14 1.5 MB Modem 存储 ⚠️
misc p15 1 MB 杂项
fsc/ssd p16/p17 <1 MB Secure
splash p18 10 MB 开机画面
DDR p19 32 KB DDR
fsg p20 1.5 MB Golden backup (IMEI) ⚠️
sec p21 16 KB 安全
boot p22 16 MB 内核启动
system p23 ~1.8 GB 系统
persist p24 32 MB WiFi/BT 校准
cache p25 300 MB 缓存
recovery p26 16 MB 恢复模式
userdata p27 ~3 GB 用户数据
apanic p28 10 MB Panic 日志
backup/reserved p29/p30 10 MB 备份/保留
udisk p31 ~9.2 GB 内部存储
SD卡 mmcblk1 - 外部 SD

标注 ⚠️ 的分区一定要注意备份,线刷包中并不包含这些内容,一旦丢失将无法找回。

EDL 模式备份

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mkdir -p ~/y927/backup

cd ~/y927/Y927\(PD1410V)升级软件_an

# modem (64MB, 包含基带 + NV 数据)
uvx --from git+https://github.com/bkerler/edl.git edl \
--loader=prog_emmc_firehose_8916.mbn \
r modem ~/y927/backup/modem.img

# modemst1 / modemst2 (各 1.5MB)
uvx --from git+https://github.com/bkerler/edl.git edl \
--loader=prog_emmc_firehose_8916.mbn \
r modemst1 ~/y927/backup/modemst1.img

uvx --from git+https://github.com/bkerler/edl.git edl \
--loader=prog_emmc_firehose_8916.mbn \
r modemst2 ~/y927/backup/modemst2.img

# fsg (1.5MB, IMEI golden backup)
uvx --from git+https://github.com/bkerler/edl.git edl \
--loader=prog_emmc_firehose_8916.mbn \
r fsg ~/y927/backup/fsg.img

添加udev规则

添加udev规则,否则后续将不断需要sudo

1
2
3
4
sudo sh -c 'echo "SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"05c6\", ATTRS{idProduct}==\"9008\", MODE=\"0666\"" >> /etc/udev/rules.d/99-edl.rules'
sudo sh -c 'echo "SUBSYSTEM==\"usb\", ATTRS{idVendor}==\"18d1\", ATTRS{idProduct}==\"d00d\", MODE=\"0666\"" >> /etc/udev/rules.d/99-fastboot.rules'
sudo udevadm control --reload-rules
sudo udevadm trigger

开始刷回原厂固件

先让手机进入9008模式并被VMWare虚拟机识别,开始刷机

1
2
3
4
uvx --from git+https://github.com/bkerler/edl.git edl \
--loader=prog_emmc_firehose_8916.mbn \
--memory=eMMC \
qfil rawprogram_unsparse.xml patch0.xml .

(可选) Windows 中刷机

VMWare 虚拟机中使用的 edl 工具刷写可能太慢了,可以在 Windows 中刷。

下载 QFIL 刷机工具 https://qfiltool.com/
下载 miflash 刷机工具 https://miuiver.com/miflash/

将miflash中的 fh_loader.exe 移动到 QFIL 中

alt text

alt text

刷机完成

alt text

恢复一些基带固件

按住音量下+电源键启动到fastboot模式

1
2
3
4
5
6
fastboot flash modem ~/y927/backup/modem.img
fastboot flash fsg ~/y927/backup/fsg.img
fastboot flash modemst1 ~/y927/backup/modemst1.img
fastboot flash modemst2 ~/y927/backup/modemst2.img
# 重启手机
fastboot reboot