<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>https://wiki.uotan.cn/index.php?action=history&amp;feed=atom&amp;title=Fastboot%E5%8D%8F%E8%AE%AE</id>
	<title>Fastboot协议 - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.uotan.cn/index.php?action=history&amp;feed=atom&amp;title=Fastboot%E5%8D%8F%E8%AE%AE"/>
	<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Fastboot%E5%8D%8F%E8%AE%AE&amp;action=history"/>
	<updated>2026-06-13T21:08:19Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.uotan.cn/index.php?title=Fastboot%E5%8D%8F%E8%AE%AE&amp;diff=559&amp;oldid=prev</id>
		<title>BigfootACA：​简单添加Fastboot协议描述</title>
		<link rel="alternate" type="text/html" href="https://wiki.uotan.cn/index.php?title=Fastboot%E5%8D%8F%E8%AE%AE&amp;diff=559&amp;oldid=prev"/>
		<updated>2024-02-20T10:15:19Z</updated>

		<summary type="html">&lt;p&gt;简单添加Fastboot协议描述&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;大部分安卓手机的引导程序实现了一个名为Fastboot的协议，可以通过USB向设备刷写/启动操作系统，或者读取一些信息。常见的BL锁指的就是fastboot和avb(Android Verified Boot安卓验证启动）是否强制验证签名。&lt;br /&gt;
&lt;br /&gt;
==== 设备识别ID ====&lt;br /&gt;
USB Class: 0xFF, SubClass: 0x42, Protocol: 0x03&lt;br /&gt;
&lt;br /&gt;
DeviceInterfaceGUIDs: {F72FE0D4-CBCB-407D-8814-9ED673D0DD6B}&lt;br /&gt;
&lt;br /&gt;
Windows: USB\MS_COMP_WINUSB&lt;br /&gt;
&lt;br /&gt;
Windows: USB\Class_ff&amp;amp;SubClass_42&amp;amp;Prot_03&lt;br /&gt;
&lt;br /&gt;
==== 关于驱动 ====&lt;br /&gt;
Fastboot不需要驱动。&lt;br /&gt;
&lt;br /&gt;
在Linux下，fastboot工具直接读写/dev/bus/usb/XXX/XXX设备进行通信&lt;br /&gt;
&lt;br /&gt;
在Windows下，fastboot工具通过WinUSB（对于裸USB设备的包装，Windows不允许直接读写USB设备，此驱动系统内置）和设备进行通信&lt;br /&gt;
&lt;br /&gt;
WINUSB: C:\Windows\INF\winusb.INF  C:\Windows\System32\drivers\winusb.sys&lt;br /&gt;
&lt;br /&gt;
==== 主机端命令请求格式： ====&lt;br /&gt;
&lt;br /&gt;
* getvar:%s&lt;br /&gt;
&lt;br /&gt;
该命令用于从设备读取一个变量&lt;br /&gt;
&lt;br /&gt;
getvar:current-slot&lt;br /&gt;
&lt;br /&gt;
%s：任意字符串（变量名称）&lt;br /&gt;
&lt;br /&gt;
* download:%08x&lt;br /&gt;
&lt;br /&gt;
该命令表示即将向设备的缓冲区发送指定大小的数据用于刷写/启动等等&lt;br /&gt;
&lt;br /&gt;
%08x: 8字长的十六进制数（数据大小）&lt;br /&gt;
&lt;br /&gt;
小写x表示数字以小写十六进制表示，8表示不满8字长则填充，0表示使用0填充&lt;br /&gt;
&lt;br /&gt;
示例：download:0000A000&lt;br /&gt;
&lt;br /&gt;
* flash:%s&lt;br /&gt;
&lt;br /&gt;
将缓冲区中的数据刷入指定分区&lt;br /&gt;
&lt;br /&gt;
%s：任意字符串（分区名称）&lt;br /&gt;
&lt;br /&gt;
* reboot&lt;br /&gt;
&lt;br /&gt;
重启设备&lt;br /&gt;
&lt;br /&gt;
==== 设备端响应格式 ====&lt;br /&gt;
&lt;br /&gt;
* OKAY / OKAY%s&lt;br /&gt;
&lt;br /&gt;
表示命令已成功执行，并附带信息&lt;br /&gt;
&lt;br /&gt;
%s：任意字符串（状态信息）&lt;br /&gt;
&lt;br /&gt;
示例：OKAY&lt;br /&gt;
&lt;br /&gt;
示例：OKAYyes&lt;br /&gt;
&lt;br /&gt;
示例：OKAYcommand done&lt;br /&gt;
&lt;br /&gt;
* INFO%s&lt;br /&gt;
&lt;br /&gt;
命令执行中上报状态信息&lt;br /&gt;
&lt;br /&gt;
%s：任意字符串（状态信息）&lt;br /&gt;
&lt;br /&gt;
示例：INFOflashing&lt;br /&gt;
&lt;br /&gt;
* FAIL / FAIL%s&lt;br /&gt;
&lt;br /&gt;
表示命令执行失败，并附带信息&lt;br /&gt;
&lt;br /&gt;
%s：任意字符串（状态信息）&lt;br /&gt;
&lt;br /&gt;
示例：FAIL&lt;br /&gt;
&lt;br /&gt;
示例：FAILunknown command&lt;br /&gt;
&lt;br /&gt;
示例：FAILwrite failed&lt;br /&gt;
&lt;br /&gt;
* DATA%08x&lt;br /&gt;
&lt;br /&gt;
表示设备已准备好接收主机端发来的数据（通常由download:%08x发起）&lt;br /&gt;
&lt;br /&gt;
%08x: 8字长的十六进制数（数据大小）&lt;br /&gt;
&lt;br /&gt;
小写x表示数字以小写十六进制表示，8表示不满8字长则填充，0表示使用0填充&lt;br /&gt;
&lt;br /&gt;
示例：DATA0000A000&lt;br /&gt;
&lt;br /&gt;
==== 示例命令分析 ====&lt;br /&gt;
&lt;br /&gt;
* fastboot getvar kernel&lt;br /&gt;
&lt;br /&gt;
主机：getvar:kernel&lt;br /&gt;
&lt;br /&gt;
设备：OKAYuefi&lt;br /&gt;
&lt;br /&gt;
* fastboot flash boot boot.img&lt;br /&gt;
&lt;br /&gt;
主机：download:00100000&lt;br /&gt;
&lt;br /&gt;
设备：DATA00100000&lt;br /&gt;
&lt;br /&gt;
主机：（发送boot.img的内容）&lt;br /&gt;
&lt;br /&gt;
设备：OKAY&lt;br /&gt;
&lt;br /&gt;
主机：flash:boot&lt;br /&gt;
&lt;br /&gt;
设备：INFOflashing...&lt;br /&gt;
&lt;br /&gt;
设备：OKAY&lt;br /&gt;
&lt;br /&gt;
==== 其它注意事项 ====&lt;br /&gt;
&lt;br /&gt;
* 向设备发送数据(download)时，数据不能大于max-download-size变量（缓冲区大小）的值。&lt;br /&gt;
&lt;br /&gt;
当需要刷写的数据超过缓冲区大小时，则使用sparse对文件分段处理。&lt;br /&gt;
&lt;br /&gt;
''（待补充...）''&lt;br /&gt;
&lt;br /&gt;
==== Fastboot实现 ====&lt;br /&gt;
Qualcomm ABL: https://git.codelinaro.org/clo/la/abl/tianocore/edk2/-/tree/uefi.lnx.4.0.r37-rel/QcomModulePkg/Library/FastbootLib&lt;br /&gt;
&lt;br /&gt;
lk2nd: https://github.com/msm8916-mainline/lk2nd/blob/master/app/aboot/fastboot.c&lt;br /&gt;
&lt;br /&gt;
U-Boot: https://github.com/u-boot/u-boot/tree/master/drivers/fastboot&lt;br /&gt;
&lt;br /&gt;
Userspace Fastbootd: https://android.googlesource.com/platform/system/core/+/refs/heads/main/fastboot/device/&lt;br /&gt;
&lt;br /&gt;
linux-simple-mass-storage: https://github.com/BigfootACA/linux-simple-mass-storage/tree/master/src/fastboot&lt;br /&gt;
&lt;br /&gt;
==== 其它参考文档 ====&lt;br /&gt;
https://android.googlesource.com/platform/system/core/+/master/fastboot/README.md&lt;/div&gt;</summary>
		<author><name>BigfootACA</name></author>
	</entry>
</feed>