|
|
|
Android Fastboot
|
|
|
|
~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
Overview
|
|
|
|
========
|
|
|
|
The protocol that is used over USB is described in
|
|
|
|
README.android-fastboot-protocol in same directory.
|
|
|
|
|
|
|
|
The current implementation is a minimal support of the erase command,the
|
|
|
|
"oem format" command and flash command;it only supports eMMC devices.
|
|
|
|
|
|
|
|
Client installation
|
|
|
|
===================
|
|
|
|
The counterpart to this gadget is the fastboot client which can
|
|
|
|
be found in Android's platform/system/core repository in the fastboot
|
|
|
|
folder. It runs on Windows, Linux and even OSX. Linux user are lucky since
|
|
|
|
they only need libusb.
|
|
|
|
Windows users need to bring some time until they have Android SDK (currently
|
|
|
|
http://dl.google.com/android/installer_r12-windows.exe) installed. You
|
|
|
|
need to install ADB package which contains the required glue libraries for
|
|
|
|
accessing USB. Also you need "Google USB driver package" and "SDK platform
|
|
|
|
tools". Once installed the usb driver is placed in your SDK folder under
|
|
|
|
extras\google\usb_driver. The android_winusb.inf needs a line like
|
|
|
|
|
|
|
|
%SingleBootLoaderInterface% = USB_Install, USB\VID_0451&PID_D022
|
|
|
|
|
|
|
|
either in the [Google.NTx86] section for 32bit Windows or [Google.NTamd64]
|
|
|
|
for 64bit Windows. VID and PID should match whatever the fastboot is
|
|
|
|
advertising.
|
|
|
|
|
|
|
|
Board specific
|
|
|
|
==============
|
|
|
|
The fastboot gadget relies on the USB download gadget, so the following
|
|
|
|
options must be configured:
|
|
|
|
|
|
|
|
CONFIG_USB_GADGET_DOWNLOAD
|
|
|
|
CONFIG_G_DNL_VENDOR_NUM
|
|
|
|
CONFIG_G_DNL_PRODUCT_NUM
|
|
|
|
CONFIG_G_DNL_MANUFACTURER
|
|
|
|
|
|
|
|
NOTE: The CONFIG_G_DNL_VENDOR_NUM must be one of the numbers supported by
|
|
|
|
the fastboot client. The list of vendor IDs supported can be found in the
|
|
|
|
fastboot client source code (fastboot.c) mentioned above.
|
|
|
|
|
|
|
|
The fastboot function is enabled by defining CONFIG_USB_FUNCTION_FASTBOOT,
|
|
|
|
CONFIG_CMD_FASTBOOT and CONFIG_ANDROID_BOOT_IMAGE.
|
|
|
|
|
|
|
|
The fastboot protocol requires a large memory buffer for downloads. This
|
|
|
|
buffer should be as large as possible for a platform. The location of the
|
|
|
|
buffer and size are set with CONFIG_FASTBOOT_BUF_ADDR and
|
|
|
|
CONFIG_FASTBOOT_BUF_SIZE.
|
|
|
|
|
|
|
|
Fastboot partition aliases can also be defined for devices where GPT
|
|
|
|
limitations prevent user-friendly partition names such as "boot", "system"
|
|
|
|
and "cache". Or, where the actual partition name doesn't match a standard
|
|
|
|
partition name used commonly with fastboot. Current implentation checks
|
|
|
|
aliases when accessing partitions by name (flash_write and erase functions).
|
|
|
|
To define a partition alias add an environment variable similar to:
|
|
|
|
fastboot_partition_alias_<alias partition name>=<actual partition name>
|
|
|
|
Example: fastboot_partition_alias_boot=LNX
|
|
|
|
|
|
|
|
Partition Names
|
|
|
|
===============
|
|
|
|
The Fastboot implementation in U-boot allows to write images into disk
|
|
|
|
partitions (currently on eMMC). Target partitions are referred on the host
|
|
|
|
computer by their names.
|
|
|
|
|
|
|
|
For GPT/EFI the respective partition name is used.
|
|
|
|
|
|
|
|
For MBR the partitions are referred by generic names according to the
|
|
|
|
following schema:
|
|
|
|
|
|
|
|
<device type> <device index letter> <partition index>
|
|
|
|
|
|
|
|
Example: hda3, sdb1, usbda1
|
|
|
|
|
|
|
|
The device type is as follows:
|
|
|
|
|
|
|
|
* IDE, ATAPI and SATA disks: hd
|
|
|
|
* SCSI disks: sd
|
|
|
|
* USB media: usbd
|
|
|
|
* MMC and SD cards: mmcsd
|
|
|
|
* Disk on chip: docd
|
|
|
|
* other: xx
|
|
|
|
|
|
|
|
The device index starts from 'a' and refers to the interface (e.g. USB
|
|
|
|
controller, SD/MMC controller) or disk index. The partition index starts
|
|
|
|
from 1 and describes the partition number on the particular device.
|
|
|
|
|
|
|
|
Writing Partition Table
|
|
|
|
=======================
|
|
|
|
Fastboot also allows to write the partition table to the media. This can be
|
|
|
|
done by writing the respective partition table image to a special target
|
|
|
|
"gpt" or "mbr". These names can be customized by defining the following
|
|
|
|
configuration options:
|
|
|
|
|
|
|
|
CONFIG_FASTBOOT_GPT_NAME
|
|
|
|
CONFIG_FASTBOOT_MBR_NAME
|
|
|
|
|
|
|
|
In Action
|
|
|
|
=========
|
|
|
|
Enter into fastboot by executing the fastboot command in u-boot and you
|
|
|
|
should see:
|
|
|
|
|GADGET DRIVER: usb_dnl_fastboot
|
|
|
|
|
|
|
|
On the client side you can fetch the bootloader version for instance:
|
|
|
|
|>fastboot getvar bootloader-version
|
|
|
|
|bootloader-version: U-Boot 2014.04-00005-gd24cabc
|
|
|
|
|finished. total time: 0.000s
|
|
|
|
|
|
|
|
or initiate a reboot:
|
|
|
|
|>fastboot reboot
|
|
|
|
|
|
|
|
and once the client comes back, the board should reset.
|
|
|
|
|
|
|
|
You can also specify a kernel image to boot. You have to either specify
|
|
|
|
the an image in Android format _or_ pass a binary kernel and let the
|
|
|
|
fastboot client wrap the Android suite around it. On OMAP for instance you
|
|
|
|
take zImage kernel and pass it to the fastboot client:
|
|
|
|
|
|
|
|
|>fastboot -b 0x80000000 -c "console=ttyO2 earlyprintk root=/dev/ram0
|
|
|
|
| mem=128M" boot zImage
|
|
|
|
|creating boot image...
|
|
|
|
|creating boot image - 1847296 bytes
|
|
|
|
|downloading 'boot.img'...
|
|
|
|
|OKAY [ 2.766s]
|
|
|
|
|booting...
|
|
|
|
|OKAY [ -0.000s]
|
|
|
|
|finished. total time: 2.766s
|
|
|
|
|
|
|
|
and on the gadget side you should see:
|
|
|
|
|Starting download of 1847296 bytes
|
|
|
|
|........................................................
|
|
|
|
|downloading of 1847296 bytes finished
|
|
|
|
|Booting kernel..
|
|
|
|
|## Booting Android Image at 0x81000000 ...
|
|
|
|
|Kernel load addr 0x80008000 size 1801 KiB
|
|
|
|
|Kernel command line: console=ttyO2 earlyprintk root=/dev/ram0 mem=128M
|
|
|
|
| Loading Kernel Image ... OK
|
|
|
|
|OK
|
|
|
|
|
|
|
|
|
|Starting kernel ...
|