1 QFIL WIndows
来自:高通系列烧写操作指南_Telpo开发者平台
https://www.cnblogs.com/blogs-of-lxl/p/10620662.html
这个看起来简单,实际也有很多门门道道,而且有时候这个是bringup的第一步,有可能在这里烧写会失败,要去定位分析。此外对高通的firehose协议也要有一定了解。
====================20261105补充====================
一般使用adb reboot edl进入,或者硬件短接测试点进入。
高通的启动模式如下:
[ 上电开机 ] │ ▼ ┌──────────────┐ │ PBL (ROM) │ <-- 芯片出厂不可篡改的高通固化代码 (Primary Bootloader) └──────┬───────┘ │ [ 校验签名 ] ──(失败 / 找不到 SBL/xBL / 检测到 GPIO 触发)──┐ │ │ ▼ (校验成功) ▼ ┌──────────────┐ ┌──────────────────┐ │ SBL / xBL │ │ 进入 EDL 模式 │ └──────┬───────┘ │ (高通 9008 端口) │ │ └─────────┬────────┘ ▼ │ ┌──────────────┐ ▼ │ Bootloader │ (如 ABOOT / LK / Fastboot) [ 等待上位机烧录命令 ] └──────┬───────┘ │ ▼ ┌──────────────┐ │ Linux/Android│ └──────────────┘可以看出,9008模式是由PBL启动,这部分功能是固化在芯片内部 ROM的。此时即便 Bootloader 损坏、系统分区被误擦除、甚至连屏幕都不亮(黑砖)时,只要芯片硬件没有物理烧毁,都能通过 9008 模式将固件重新写入闪存(eMMC / UFS)。
9008烧写的核心文件:
| 文件名称 | 作用与描述 |
(或 .mbn) | Firehose 引导引导文件(极度重要)。 由于 PBL 自身功能极简,它不能直接擦写大型 UFS/eMMC。烧录的第一步,就是上位机先将这个极小的 |
rawprogramX.xml | 烧录规则描述文件。 定义了哪个镜像刷入哪个扇区。例如:
|
patchX.xml | 分区表修复与校验文件。 定义了烧录完成后需要修补的 CRC32 校验码、GPT 分区表头等数据。 |
.img/.bin镜像 | 具体的系统分区数据文件(如boot.img,super.img,persist.img等)。 |
9008烧写的Firehose 协议,看看就好,实际基本上用不到。
电脑上位机 (QPST/MiFlash) 高通芯片 (PBL) │ │ │─────── 1. 发送 Sahara 协议数据 ─────►│ (加载 prog_firehose.elf 到芯片 SRAM) │ │ │◄────── 2. Firehose 握手成功 ─────────│ (Firehose 程序在芯片内部启动) │ │ │─────── 3. 发送 XML 指令 (Firehose) ─►│ (解析 rawprogram.xml) │─────── 4. 传输物理 Block 镜像 ──────►│ (直接将镜像写入 UFS/eMMC) │ │ │◄────── 5. 写入完成 (ACK) ────────────│2 FastBoot Linux
安卓烧机方法 - 知乎
这个就是第二种烧写办法,用fastboot命令直接把bin写到分区中。
与 9008 这种运行在芯片片上 ROM (PBL) 里的紧急救援协议不同,Fastboot 协议运行在设备引导加载程序(Bootloader / Userspace FastbootD)阶段。它是当前主流 Android 生态(如 Pixel、一加、小米等)中进行日常系统升级、分区擦写、刷写内核和解琐的主流标准协议。
经典的 Fastboot 烧录交互流程:
电脑端 (Host: fastboot tool) 设备端 (Device: Bootloader) │ │ │─────── 1. 发送 getvar:version ──────────────────────►│ (查询协议版本) │◄────── OKAY / DATA 响应 ─────────────────────────────│ │ │ │─────── 2. 发送 download:<文件大小十六进制> ──────────►│ (告知设备即将发送多大镜像) │◄────── DATA (允许发送,返回需要的缓冲区大小) ────────│ │ │ │─────── 3. USB Bulk-Out 传输 boot.img 二进制数据 ────►│ (流式传输镜像到设备 RAM 中) │◄────── OKAY (数据接收完毕,校验成功) ────────────────│ │ │ │─────── 4. 发送 flash:boot ──────────────────────────►│ (下达烧录指令) │ [设备开始擦除闪存并在内部将 RAM 数据写入分区] │ │◄────── OKAY / FAIL ──────────────────────────────────│ (烧录成功或失败返回)之前用的烧写脚本
hlos fastboot flash abl_a abl.elf fastboot flash boot_a boot.img fastboot flash dtbo_a dtbo.img fastboot flash metadata metadata.img fastboot flash super super.img fastboot flash vbmeta_a vbmeta.img fastboot flash vbmeta_system_a vbmeta_system.img fastboot flash vendor_boot_a vendor_boot.img nonhlos fastboot flash modem_a NON-HLOS.bin fastboot flash BTFM.bin fastboot flash dspso.bin fastboot flash splash splash.img fastboot flash qupfw_a qupv3fw.elf fastboot flash devcfg_a devcfg.mbn fastboot flash hyp_a hyp.mbn fastboot flash tz_a tz.mbn fastboot flash keymaster_a keymint.mbn fastboot flash featenabler_a featenabler.mbn fastboot flash storsec storsec.mbn fastboot flash uefisecapp_a uefi_sec.mbn fastboot flash imagefv_a imagefv.elf fastboot flash logfs logfs_ufs_8mb.bin fastboot flash xbl_a xbl.elf fastboot flash xbl_config_a xbl_config.elf fastboot flash shrm_a shrm.elf大概是以上的分区,这些和安卓和高通设备都是强相关,可能换一个版本就不同了。
3 分区表
最后还是要说说分区表,其实不管是QFIL还是fastboot,都是将bin烧写到分区表制定的地址。这部分之前有说过,就不多说了。
https://www.cnblogs.com/zhengliang/p/13218706.html