1、什么是fastboot

(1)fastboot是android使用的一种刷机方法。

因为Android、的底层是Linux

(2)fastboot使用usb作为物理传输

(3)fastboot是uboot中的一个命令

在uboot下输入fastboot命令,就可以让uboot进入fastboot模式,刷机就是在fastboot模式下进行刷机。

(4)fastboot需要主机端的fastboot软件相配合

(5)fastboot在开发板和主机之间定义了一套协议

2、当我们在uboot中输入fastboot时,有时会出现不正常的现象,我们在uboot下输入 fdisk -c 0 ,完了之后再输入fastboot就好使了。因为我们SD/MMC设备第0扇区是空闲的,0扇区一般放的都是我们SD/MMC设备的分区信息的,所以这个扇区为空闲的,没有用的话,fastboot命令执行时,就读取不到这个设备的分区信息,所以我们在uboot下输入fdisk -c 0就是给我们SD/MMC的0扇区中,弄上分区信息的。

这时就进入了fastboot模式,这时的uboot就相当于了一个USB设备,和我们主机进行通信了,在主机中的fastboot软件中,文件就可以download到开发板中的inand或者其他。

3、uboot的fastboot命令将开发板伪装了一个usb从设备(主机的usb是主设备,从设备是被主设备识别的),开发板本身不是usb设备,所以当我们的开发板直接通过usb线和主机的usb接口连接时,主机是识别不到一个usb设备的。当我们在uboot下输入fastboot命令时,主机就会识别到一个usb设备,并且我们没有驱动的话,还告诉我们装驱动。所以uboot的fastboot命令将开发板伪装成了一个usb从设备。所以主机中就会识别到一个android手机设备,因为当初谷歌在做android的时候发明的fastboot,所以当时主要是用来做手机的,所以会把这个fastboot模式下的设备当成一个手机设备

4、uboot中只要输入fastboot命令,进入到fastboot模式就可以了,认为协议都是规定好的,我们只需要在主机端运行fastboot这个软件,完了就可以和我们的开发板进行通信了,主机可以通过fastboot命令与带的参数和开发板进行通信。比如fastboot flash kernel xxxx 就是fastboot命令携带的一些参数和开发板通过usb线的传输进行通信了,会将这个xxxkernel烧录到开发板的SD/MMC设备上的kernel分区中。

5.我们学习fastboot的思路就是,

在主机端的fastboot软件,我们是不去做什么分析的

我们在开发板段去分析fastboot,看uboot是如何通过fastboot命令进入到fastboot模式下的,是如何响应主机通过usb线发送过来的命令的。

6、uboot中的fastboot代码分析

(1)因为fastboot是uboot的一个命令,所以在uboot的源码中找的时候,肯定是通过do_fastboot这函数去找。

(2)当我们用fastboot命令烧录镜像等文件时,有时会出现烧录错误,说文件太大了,那是因为我们从主机端通过usb线将要烧录到开发板中的镜像文件,先放到开发板的内存中去缓冲,uboot在从这个内存的缓冲区去将文件烧录到SD/MMC设备中,在uboot的关于fastboot的操作中,会将给fastboot设置一个缓冲区,因为向着写download操作,fastboot会用到内存的,在配置头文件中有一个fastboot_transbuff_size类似的宏 ,这个宏就是来配置fastboot缓冲区的大小的。如果要烧录的镜像传输到这个内存区域后,如果镜像太大了,就会出现p_w_picpath太大了的问题。所以要改动的话,要解决这个问题的话。就可以将这个fastboot的缓冲区的大小加大即可