Fastboot协议

来自Uotan Wiki · 刷机百科
BigfootACA讨论 | 贡献2024年2月20日 (二) 18:15的版本 (简单添加Fastboot协议描述)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

大部分安卓手机的引导程序实现了一个名为Fastboot的协议,可以通过USB向设备刷写/启动操作系统,或者读取一些信息。常见的BL锁指的就是fastboot和avb(Android Verified Boot安卓验证启动)是否强制验证签名。

设备识别ID

USB Class: 0xFF, SubClass: 0x42, Protocol: 0x03

DeviceInterfaceGUIDs: {F72FE0D4-CBCB-407D-8814-9ED673D0DD6B}

Windows: USB\MS_COMP_WINUSB

Windows: USB\Class_ff&SubClass_42&Prot_03

关于驱动

Fastboot不需要驱动。

在Linux下,fastboot工具直接读写/dev/bus/usb/XXX/XXX设备进行通信

在Windows下,fastboot工具通过WinUSB(对于裸USB设备的包装,Windows不允许直接读写USB设备,此驱动系统内置)和设备进行通信

WINUSB: C:\Windows\INF\winusb.INF C:\Windows\System32\drivers\winusb.sys

主机端命令请求格式:

  • getvar:%s

该命令用于从设备读取一个变量

getvar:current-slot

%s:任意字符串(变量名称)

  • download:%08x

该命令表示即将向设备的缓冲区发送指定大小的数据用于刷写/启动等等

%08x: 8字长的十六进制数(数据大小)

小写x表示数字以小写十六进制表示,8表示不满8字长则填充,0表示使用0填充

示例:download:0000A000

  • flash:%s

将缓冲区中的数据刷入指定分区

%s:任意字符串(分区名称)

  • reboot

重启设备

设备端响应格式

  • OKAY / OKAY%s

表示命令已成功执行,并附带信息

%s:任意字符串(状态信息)

示例:OKAY

示例:OKAYyes

示例:OKAYcommand done

  • INFO%s

命令执行中上报状态信息

%s:任意字符串(状态信息)

示例:INFOflashing

  • FAIL / FAIL%s

表示命令执行失败,并附带信息

%s:任意字符串(状态信息)

示例:FAIL

示例:FAILunknown command

示例:FAILwrite failed

  • DATA%08x

表示设备已准备好接收主机端发来的数据(通常由download:%08x发起)

%08x: 8字长的十六进制数(数据大小)

小写x表示数字以小写十六进制表示,8表示不满8字长则填充,0表示使用0填充

示例:DATA0000A000

示例命令分析

  • fastboot getvar kernel

主机:getvar:kernel

设备:OKAYuefi

  • fastboot flash boot boot.img

主机:download:00100000

设备:DATA00100000

主机:(发送boot.img的内容)

设备:OKAY

主机:flash:boot

设备:INFOflashing...

设备:OKAY

其它注意事项

  • 向设备发送数据(download)时,数据不能大于max-download-size变量(缓冲区大小)的值。

当需要刷写的数据超过缓冲区大小时,则使用sparse对文件分段处理。

(待补充...)

Fastboot实现

Qualcomm ABL: https://git.codelinaro.org/clo/la/abl/tianocore/edk2/-/tree/uefi.lnx.4.0.r37-rel/QcomModulePkg/Library/FastbootLib

lk2nd: https://github.com/msm8916-mainline/lk2nd/blob/master/app/aboot/fastboot.c

U-Boot: https://github.com/u-boot/u-boot/tree/master/drivers/fastboot

Userspace Fastbootd: https://android.googlesource.com/platform/system/core/+/refs/heads/main/fastboot/device/

linux-simple-mass-storage: https://github.com/BigfootACA/linux-simple-mass-storage/tree/master/src/fastboot

其它参考文档

https://android.googlesource.com/platform/system/core/+/master/fastboot/README.md