Android的刷机模式
高通为例子。不看不知道,一看原来这么多。想以前做博通方案,就是一个web刷机包刷到死。到底是技术进步了还是以前太浅薄?!。。。(博通刷机应该也是很多种,web只是比较方便的一种)
基本参考这篇:https://www.cnblogs.com/bluestorm/p/18129830

常用的应该就是OTA,FastBoot。EDL好像都很少用吧,不过今天确认用到了,还让我自己去焊接,我真无语了。。。
不过EDL模式不懂也正常,因为这个是高通独有。感觉有点类似JTAG那种刷机吧。我的理解OTA是操作系统层面的升级,FastBoot是bootloader层面的升级,EDL就是类似JTAG的层面,网上很多叫做9008升级,是因为用的COM9008。在使用EDL的时候,还要安装高通的QFIL工具,应该熟悉一下就好。
| 开机模式 | 屏幕显示 | 冷启动 | 热启动 | 按键退出 | 典型命令 |
|---|---|---|---|---|---|
| Android/Normal | Android界面 | 按Power键 | adb reboot | 手机短按,VR长按Power键 | |
| Recovery/OTA/卡刷 | Recovery界面 | 按住OK键(Vol+) 再按Power键 | adb reboot recovery | 长按Power键重启 | 将官方 OTA 升级包放到手机存储中或使用 adb sideload update.zip |
| Fastboot/线刷 | Fastboot界面 | 按住BACK键(Vol-) 再按Power键 | adb reboot bootloader | 长按Power键重启 | fastboot flash boot boot.img |
| FFBM/Fast Factory/厂测/半开机 | 显示测试列表 | misc分区头部为ffbm时 按Power键 | misc分区头部为ffbm时,adb reboot | 长按Power键重启依然进入FFBM | |
| EDL/紧急下载/9008/砖头/裸板 | 无显示,黑屏 | 同时按住OK键(Vol+)和BACK键(Vol-) 再按Power键 | adb reboot edl fastboot reboot emergency | 长按Power键重启 | 使用QFIL工具 |
========================20261105更新========================
做了2年再回来看,其实常用的刷机模式就两种。
1 Fastboot
-
原理:利用设备引导加载程序(Bootloader)中的 Fastboot 接口,在电脑端通过
fastboot命令行工具将镜像文件(如boot.img,system.img,vendor.img,super.img,init_boot.img)直接写入设备的物理分区。 -
特点:底层、高效、常用于救砖、升级官方线刷包(Fastboot 脚本)或刷入自定义 Boot/Kernel 以获取 Root 权限。
-
前提:必须先解锁 Bootloader(BL 锁)。
使用这个有时候需要安装对应的USB驱动。此外需要知道逻辑分区名称以及所使用的 Android 架构代际。
比如以前刷 Root(如 Magisk)都是修饰 boot.img 并刷入 boot 分区。在 Android 13+ 的新设备上,Boot 校验被移到了 init_boot.img,需要修饰 init_boot.img 并运行 fastboot flash init_boot magisk_patched.img。
可以使用以下命令:
# 1. 查询设备支持的所有分区名称及其属性
fastboot getvar all
# 2. 查询设备当前的 A/B 槽位(如果是 A/B 结构)
fastboot getvar current-slot
# 3. 查询是否支持动态分区 (is-userspace)
fastboot getvar is-userspace
这里有一个fastboot刷机的示例:
#!/bin/bash
# 确保脚本在出错时直接退出
set -e
echo "=========================================="
echo " Android Fastboot 自动刷机脚本示例"
echo "=========================================="
# 1. 检查 fastboot 工具是否存在
if ! command -v fastboot &> /dev/null; then
echo "[错误] 未找到 fastboot 命令,请先安装 Android Platform-Tools 并将其加入环境变量。"
exit 1
fi
# 2. 检测设备连接状态
echo "正在检测已连接的 Fastboot 设备..."
FASTBOOT_DEVICES=$(fastboot devices | awk '{print $1}')
if [ -z "$FASTBOOT_DEVICES" ]; then
echo "[错误] 未检测到处于 Fastboot 模式的设备,请检查 USB 连接或驱动。"
exit 1
else
echo "成功检测到设备: $FASTBOOT_DEVICES"
fi
# 3. 询问用户是否需要清除用户数据(可选)
read -p "是否需要执行格式化并清除用户数据 (Wipe/Format userdata)? [y/N]: " WIPE_DATA
# 4. 开始刷入各项镜像
echo "------------------------------------------"
echo "开始刷入底层引导与内核分区..."
# 针对现代动态分区(Dynamic Partitions)设备的常用分区刷写
# 注:部分老设备或特定芯片可能没有 init_boot 或 vendor_boot,请根据实际镜像调整
if [ -f "boot.img" ]; then
fastboot flash boot boot.img
fi
if [ -f "init_boot.img" ]; then
fastboot flash init_boot init_boot.img
fi
if [ -f "vendor_boot.img" ]; then
fastboot flash vendor_boot vendor_boot.img
fi
if [ -f "dtbo.img" ]; then
fastboot flash dtbo dtbo.img
fi
if [ -f "vbmeta.img" ]; then
fastboot flash vbmeta vbmeta.img
fi
echo "------------------------------------------"
echo "开始刷入系统主镜像 (super.img,这可能需要几十秒)..."
if [ -f "super.img" ]; then
# 刷入 super 分区前有时需要擦除或调整大小,根据具体包而定
fastboot flash super super.img
else
echo "[错误] 核心镜像 super.img 不存在,无法完成刷机!"
exit 1
fi
# 5. 根据用户选择决定是否清除数据
if [ "$WIPE_DATA" = "y" ] || [ "$WIPE_DATA" = "Y" ]; then
echo "------------------------------------------"
echo "正在格式化用户数据区 (userdata & cache)..."
fastboot -w
else
echo "已跳过用户数据清除(保留原有应用与配置)。"
fi
# 6. 重启设备
echo "------------------------------------------"
echo "刷机完成!正在重启设备进入系统..."
fastboot reboot
echo "所有操作已执行完毕。"
2 EDL
-
原理:通过短接主板上的 EDL 测试点(Test Point)、使用专用 9008 刷机线(工程线)或命令强制让高通芯片进入 Emergency Download Mode (9008)。
-
工具:使用 QPST / QFIL(Qualcomm Flash Image Loader)或 MiFlash,直接向闪存 UFS / eMMC 的最低层 Sector 写入数据。
-
特点:不依赖 Bootloader 状态(即便 BL 被锁也能救砖),是高通设备的终极救砖手段(注:部分新芯片需要官方授权账号凭证签名)。
在实际开发中,EDL是最后手段,一般是直接短接电路板。然后使用高通的烧写工具。

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)