分类:
2012-06-18 20:45:46
原文地址:Android的fastboot协议 作者:bellsleep
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” 请求0x1234个byte的数据
Client: "DATA00001234" 准备好接收数据
Host: "< 0x1234 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的变量名字不要以小写字母开头。