| 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_USB_GADGET_VENDOR_NUM |
| CONFIG_USB_GADGET_PRODUCT_NUM |
| CONFIG_USB_GADGET_MANUFACTURER |
| |
| NOTE: The CONFIG_USB_GADGET_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 ... |