news 2026/11/6 3:08:51

高通学习9--烧写

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
高通学习9--烧写

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烧写的核心文件:

文件名称作用与描述

prog_firehose_XXXX.elf

(或 .mbn)

Firehose 引导引导文件(极度重要)。

由于 PBL 自身功能极简,它不能直接擦写大型 UFS/eMMC。烧录的第一步,就是上位机先将这个极小的prog_firehose加载到芯片的内部 SRAM 中运行。它充当烧录代理程序,负责解析 xml 并执行真正的数据擦写。

rawprogramX.xml

烧录规则描述文件。

定义了哪个镜像刷入哪个扇区。例如:

<program sector_size_in_bytes="512" file_sector_offset="0" filename="boot.img" label="boot" start_sector="131072"/>

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/6 3:05:48

工业控制器分级存储设计:EEPROM、NOR Flash与SD卡选型及STM32/FPGA协同

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/6 3:05:26

欧姆龙PLC通信协议全解析:FINS/TCP、地址映射与踩坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/6 3:04:23

FOC电流环设计与实现:从原理到代码的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/6 3:03:10

AUTOSAR诊断事件管理DEM:DTC从诞生到老化的一生

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/6 3:02:04

欧姆龙PLC通信协议深度解析:HostLink与FINS实战排坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/6 3:00:43

I2C多主机仲裁与时钟延展:开漏输出下的精妙设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华