| 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 | |
| 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 ... |