fastboot模式是bootloader后期进入的一个特殊阶段,在此模式下可以向bootloader传送刷机文件进行文件分区重烧。fastboot实现了一个简单的通信协议,能够与bootloader的USB通讯,主要用来接收命令并更新镜像文件。 在使用fastboot工具时,USB线必须始终联着PC机,所以这种方式称为线刷。 用fastboot需要bootloader 支持,所以不是每一家公司产品都支的这个功能的。
如果没有进入fastboot,bootloader继续执行,如果发现有特殊的按键组合,则会进入recovery模式。分析recovery.img镜像文件就会发现,它里面包含了一个kernel以及一个可执行程序recovery,以及一些初始化文件。从某种意义来说,这就是一个小型操作系统,和正常启动进入的系统的kernel是一样的,只是init及之后干的事情不同。这里的kernel和我们常说的linux内核还是有差异的,linux内核是包括kernel以及调度器内存管理等除显示界面外完整系统,而kernel只是指内核init进程启动前的那一段逻辑。在recovery模式下,会加载了部分文件系统,所以才可以读sdcard中的update.zip进行刷机,当然,也可以清除cache和用户数据。
Recovery 本身的本质也是一个简单Linux加一个Google 开发简单图形界面。它跟你在用的内核的boot.img分区的格式是完全一样的。当内核有问题时,可以切换到Recoverty这个小操作系统里用工具重新下载内核,就像PC机的可引导的U盘修复盘。 Recovery刷机包是Google Update 格式的,在用Recovery恢复时,刷机包通常放在SD卡里,所以这里刷机一般称为卡刷。这种方法的优点就是不需要PC机即可以完成刷机。
recovery过程主要有两个作用 :factory reset 和 OTA install。一般Android系统都有两个分区 /boot /recovery。这两个分区都可以引导系统。Android的上层结构(虚拟机)可以调用一个特定的类( RecoverySystem ) 来写入命令参数以提供重启之后recovery模式所必需的命令参数。简而言之,recovery模式方便开发者升级系统和擦除相应的分区( /data和/cache )。