Android的fastboot协议


fastboot协议是PC通过USB与手机上的bootloader通信的协议。适用于Linux,Windows,OSX等平台。
基本配置要求:
1、USB连接PC与手机。
2、对于high-speec USB,包的最大尺寸必须是512byte.对于full-speed USB,包的最大尺寸必须是64byte。
3、协议由PC端驱动。
 
协议传输过程如下:
1、PC向手机发送一个命令,命令由ASCII字符组成,必须存在在一个不大于64byte的包里。
2、手机向PC响应一个不大于64byte的包。包的最前面四个byte是“OKAY”、“FAIL”、“DATA”、“INFO”中的一个。后面如果还有byte,包含就是ASCII信息。下面具体解释
INFO:后面的60个byte代表的信息被显示完成后,跳到#2继续执行。
FAIL:命令执行失败。后面的60个byte是需要显示给用户的失败信息。
OKAY:命令执行成功。跳到#1.
DATA:命令执行成功,开始进入数据传输阶段。一个DATA响应包的大小是12byte,通常是DATA00000000这样的形式,后面的8个数字代表的要传输的数据包的总大小。
3、如果#2时,PC收到的是DATA命令的话,就开始传输数据。0byte数据会被忽略。当#2指示的数据大小被传输完成时,数据传输结束。
例子:
Host:  ”getvar:version”          查看版本号
Client: “OKAY0.4″                  返回版本号
Host:  ”getvar:nonexistant”   查看一些未定义的变量
Client: “OKAY”                       返回值“”
Host:  “download:00001234” 请求0×1234个byte的数据
Client: “DATA00001234″       准备好接收数据
Host:  ”< 0×1234 bytes >”    发送数据
Client “OKAY”                        成功
Host:  ”flash:bootloader”        把数据刷到bootloader中。
Client “INFOerasinig flash”     指明状态或进度
“INFOwriting flash”
“OKAY”                       成功
Host:  ”powerdown”              发送一个关机命令
Client: “FAILunknown command”失败
命令手册:
1、命令参数格式遵守printf-style
2、命令都是ASCII字符串,不能包含引号,不用以0byte结尾
3、本文档中的命令都是以小写字母开头,为了兼容,OEM的命令不要以小写字母开头。
 
“getvar:%s”
从bootloader读取一个配置/版本变量。变量值跟在OKAY响应后面返回。
“download:%08x”
把数据写入内存,这些数据会被后面执行的“boot”,”ramdisk”,”flash”等使用。Client的RAM如果有足够的空间的话,会返回一个“DATA%08x”。否则返回“FAIL”。数据大小会被记录下来。
“verify:%08x”
发送一个数字签名来验证下载的数据。如果bootloader当前是“secure”模式,签名会被使用。如果是“flash”和“boot”模式的话,签名被忽略。
“flash:%s”
把前面下载的image写到指定名字的分区中。
“erase:%s”
擦除指定名字的分区。
“boot”
前面下载的数据是一个boot.imgand should be booted according to the normal
procedure for a boot.img
“continue”
Continue booting as normal (if possible)
“reboot”
重启设备
“reboot-bootloader”
重启并回到bootloader,这对那些需要先升级bootloader才能升级其它分区的升级过程很有用。
“powerdown”
关闭设备。
 
Client端的变量
“getvar:%s”命令可以读一些client端的变量。这些变量通常会可以告诉我们设备以及安装在设备上的软件的信息。目前已经定义的变量如下:
version
当前支持的FastBoot协议版本,对这个文档来说,它的值应该是“0.3”
version-bootloader
Bootloader的版本号
version-baseband
Baseband软件的版本
product
产品的名字
serialno
产品的序列号(serial number)
secure
如果值是“yes”,表示这是一个secure的bootloader,在安装或者boot那些image之前需要一个签名
 
另外,这些变量的名字都是以小写字母开头,为了兼容性考虑,OEM的变量名字不要以小写字母开头。

转载请注明来源:Cofface Blog » Android的fastboot协议

赞 (4) 打赏

感谢您的支持,我会继续努力的!

支付宝扫一扫打赏

微信扫一扫打赏