高通为例子。不看不知道,一看原来这么多。想以前做博通方案,就是一个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是最后手段,一般是直接短接电路板。然后使用高通的烧写工具。