2012-12-06 18:34:34 +01:00
|
|
|
|
2013-06-25 20:52:05 +02:00
|
|
|
FastBoot Version 0.4++
|
2012-12-06 18:34:34 +01:00
|
|
|
----------------------
|
|
|
|
|
|
|
|
The fastboot protocol is a mechanism for communicating with bootloaders
|
|
|
|
over USB. It is designed to be very straightforward to implement, to
|
|
|
|
allow it to be used across a wide range of devices and from hosts running
|
|
|
|
Linux, Windows, or OSX.
|
|
|
|
|
|
|
|
|
|
|
|
Basic Requirements
|
|
|
|
------------------
|
|
|
|
|
|
|
|
* Two bulk endpoints (in, out) are required
|
|
|
|
* Max packet size must be 64 bytes for full-speed and 512 bytes for
|
|
|
|
high-speed USB
|
|
|
|
* The protocol is entirely host-driven and synchronous (unlike the
|
|
|
|
multi-channel, bi-directional, asynchronous ADB protocol)
|
|
|
|
|
|
|
|
|
|
|
|
Transport and Framing
|
|
|
|
---------------------
|
|
|
|
|
|
|
|
1. Host sends a command, which is an ascii string in a single
|
|
|
|
packet no greater than 64 bytes.
|
|
|
|
|
|
|
|
2. Client response with a single packet no greater than 64 bytes.
|
|
|
|
The first four bytes of the response are "OKAY", "FAIL", "DATA",
|
|
|
|
or "INFO". Additional bytes may contain an (ascii) informative
|
|
|
|
message.
|
|
|
|
|
|
|
|
a. INFO -> the remaining 60 bytes are an informative message
|
|
|
|
(providing progress or diagnostic messages). They should
|
|
|
|
be displayed and then step #2 repeats
|
|
|
|
|
|
|
|
b. FAIL -> the requested command failed. The remaining 60 bytes
|
|
|
|
of the response (if present) provide a textual failure message
|
|
|
|
to present to the user. Stop.
|
|
|
|
|
|
|
|
c. OKAY -> the requested command completed successfully. Go to #5
|
|
|
|
|
|
|
|
d. DATA -> the requested command is ready for the data phase.
|
|
|
|
A DATA response packet will be 12 bytes long, in the form of
|
|
|
|
DATA00000000 where the 8 digit hexidecimal number represents
|
|
|
|
the total data size to transfer.
|
|
|
|
|
|
|
|
3. Data phase. Depending on the command, the host or client will
|
|
|
|
send the indicated amount of data. Short packets are always
|
|
|
|
acceptable and zero-length packets are ignored. This phase continues
|
|
|
|
until the client has sent or received the number of bytes indicated
|
|
|
|
in the "DATA" response above.
|
|
|
|
|
|
|
|
4. Client responds with a single packet no greater than 64 bytes.
|
|
|
|
The first four bytes of the response are "OKAY", "FAIL", or "INFO".
|
|
|
|
Similar to #2:
|
|
|
|
|
|
|
|
a. INFO -> display the remaining 60 bytes and return to #4
|
|
|
|
|
|
|
|
b. FAIL -> display the remaining 60 bytes (if present) as a failure
|
|
|
|
reason and consider the command failed. Stop.
|
|
|
|
|
|
|
|
c. OKAY -> success. Go to #5
|
|
|
|
|
|
|
|
5. Success. Stop.
|
|
|
|
|
|
|
|
|
|
|
|
Example Session
|
|
|
|
---------------
|
|
|
|
|
|
|
|
Host: "getvar:nonexistant" request some undefined variable
|
|
|
|
|
|
|
|
Client: "OKAY" return value ""
|
|
|
|
|
|
|
|
Host: "download:00001234" request to send 0x1234 bytes of data
|
|
|
|
|
|
|
|
Client: "DATA00001234" ready to accept data
|
|
|
|
|
|
|
|
Host: < 0x1234 bytes > send data
|
|
|
|
|
|
|
|
Client: "OKAY" success
|
|
|
|
|
|
|
|
Host: "flash:bootloader" request to flash the data to the bootloader
|
|
|
|
|
|
|
|
Client: "INFOerasing flash" indicate status / progress
|
|
|
|
"INFOwriting flash"
|
|
|
|
"OKAY" indicate success
|
|
|
|
|
|
|
|
Host: "powerdown" send a command
|
|
|
|
|
|
|
|
Client: "FAILunknown command" indicate failure
|
|
|
|
|
|
|
|
|
|
|
|
Command Reference
|
|
|
|
-----------------
|
|
|
|
|
|
|
|
* Command parameters are indicated by printf-style escape sequences.
|
|
|
|
|
|
|
|
* Commands are ascii strings and sent without the quotes (which are
|
|
|
|
for illustration only here) and without a trailing 0 byte.
|
|
|
|
|
|
|
|
* Commands that begin with a lowercase letter are reserved for this
|
|
|
|
specification. OEM-specific commands should not begin with a
|
|
|
|
lowercase letter, to prevent incompatibilities with future specs.
|
|
|
|
|
|
|
|
"getvar:%s" Read a config/version variable from the bootloader.
|
|
|
|
The variable contents will be returned after the
|
|
|
|
OKAY response.
|
|
|
|
|
|
|
|
"download:%08x" Write data to memory which will be later used
|
|
|
|
by "boot", "ramdisk", "flash", etc. The client
|
|
|
|
will reply with "DATA%08x" if it has enough
|
|
|
|
space in RAM or "FAIL" if not. The size of
|
|
|
|
the download is remembered.
|
|
|
|
|
|
|
|
"verify:%08x" Send a digital signature to verify the downloaded
|
|
|
|
data. Required if the bootloader is "secure"
|
|
|
|
otherwise "flash" and "boot" will be ignored.
|
|
|
|
|
|
|
|
"flash:%s" Write the previously downloaded image to the
|
|
|
|
named partition (if possible).
|
|
|
|
|
2013-06-25 20:52:05 +02:00
|
|
|
"preflash:%s" Optionally prepare for a download + flash.
|
|
|
|
E.g. flash directly during download. To deal with a
|
|
|
|
failed "flash" followed by a "boot", we send
|
|
|
|
"preflash:".
|
|
|
|
|
2012-12-06 18:34:34 +01:00
|
|
|
"erase:%s" Erase the indicated partition (clear to 0xFFs)
|
|
|
|
|
|
|
|
"boot" The previously downloaded data is a boot.img
|
|
|
|
and should be booted according to the normal
|
|
|
|
procedure for a boot.img
|
|
|
|
|
|
|
|
"continue" Continue booting as normal (if possible)
|
|
|
|
|
|
|
|
"reboot" Reboot the device.
|
|
|
|
|
|
|
|
"reboot-bootloader" Reboot back into the bootloader.
|
|
|
|
Useful for upgrade processes that require upgrading
|
|
|
|
the bootloader and then upgrading other partitions
|
|
|
|
using the new bootloader.
|
|
|
|
|
|
|
|
"powerdown" Power off the device.
|
|
|
|
|
2013-06-25 20:52:05 +02:00
|
|
|
* Note about sparse files
|
|
|
|
Large files can be split up using libsparse, and sent to the bootloader
|
|
|
|
as repeated chunks of "download:%08x" + "flash:%s".
|
2012-12-06 18:34:34 +01:00
|
|
|
|
|
|
|
Client Variables
|
|
|
|
----------------
|
|
|
|
|
|
|
|
The "getvar:%s" command is used to read client variables which
|
|
|
|
represent various information about the device and the software
|
|
|
|
on it.
|
|
|
|
|
|
|
|
The various currently defined names are:
|
|
|
|
|
|
|
|
version-bootloader Version string for the Bootloader.
|
|
|
|
|
|
|
|
version-baseband Version string of the Baseband Software
|
|
|
|
|
|
|
|
product Name of the product
|
|
|
|
|
|
|
|
serialno Product serial number
|
|
|
|
|
|
|
|
secure If the value is "yes", this is a secure
|
|
|
|
bootloader requiring a signature before
|
|
|
|
it will install or boot images.
|
|
|
|
|
|
|
|
Names starting with a lowercase character are reserved by this
|
|
|
|
specification. OEM-specific names should not start with lowercase
|
|
|
|
characters.
|
|
|
|
|
|
|
|
|