刷机过程及原理

一定要对源码体系有足够的认知,才能对刷机有深刻的理解。现在只能概述了

刷机过程及原理_第1张图片
最底层各种硬件设备略过不提

Bootloader:PC主板上一小段程序较BIOS,主板加店跑起来的第一个程序,负责初始化硬件,OS启动,嵌入式设备里也有类似的程序,不叫BIOS,叫Bootloader。使用最广泛的是一个叫uboot的程序,编译后生成uboot.bin镜像,烧到特定分区,就可以作为Bootloader使用。

Bootloader支持交互式启动,也就是初始化硬件完成后,不是马上启动OS,而是停留在当前状态。等待用户输入命令告诉他接下来干什么,这种启动模式叫Fastboot模式。 adb reboot bootloader进入Fastboot模式

进入Fastboot之前,先了解ROM结构。一个能够正常启动的ROM包含以下四个分区。

1. Bootloader,存放uboot.bin的分区
2. Bootloader用来保存环境变量的分区
3. Kernel,存放os内核的分区
4. Rootfs,存入系统第一个进程init对应的程序的分区

Fastboot模式下,可以通过另外一个工具fastboot来让设备执行指定的命令,对于刷机者来说,最常用的就是刷入各种镜像文件。例如,Kernel分区和Rootfs分区刷入指定的镜像。

android设备上,处于Fastboot模式时,我们可以把一个包含Kernel和Rootfs的Recovery.img镜像通过fastboot工具刷入到设备上一个叫Revovery的分区去,就是刷Recovery,属于刷ROM的一种,Recovery包含有Kerne和Rootfs,因此Recovery刷入设备后可以让设备正常的启动起来,这个启动方式叫Recovery模式 adb reboot recovery。

总结一下,Bootloader程序即uboot.bin启动完毕,进入Fastboot模式,用fastboot工具刷入Recovery.img镜像后,进入Recovery模式。

当设备处于Recovery模式时,我们可以做些什么呢?答案是取决于刷入的Recovery.img所包含的Rootfs所包含的程序。更确切地说,是取决于Rootfs镜像里面的init程序都做了些什么事情。不过顾名思义,Recovery就是用来恢复系统的意思,也包含有更新系统的意思。这里所说的系统,是用户正常使用的系统,里面包含有Android运行时框架,使得我们可以在上面安装和使用各种APP

用户正常使用Android设备时的系统,主要是包含有两个分区:System分区和Boot分区。System分区包含有Android运行时框架、系统APP以及预装的第三方APP等,而Boot分区包含有Kernel和Rootfs。刷入到System分区和Boot分区的两个镜像称为system.img和boot.img,我们通常将它们打包和压缩为一个zip文件,例如update.zip,并且将它上传到Android设备上的sdcard上去。这样当我们进入到Recovery模式时,就可以在Recovery界面上用我们之前上传到sdcard的zip包来更新用户正常使用Android设备时所用的系统了。这个过程就是通常所说的刷ROM了。

广义上的刷ROM,实际上包含更新Recovery(Kernel和Rootfs)和更新用户正常使用的系统两个意思;而狭义上的刷ROM,只是更新用户正常使用的那个系统。更新Recovery需要进入到Fastboot模式中,而更新用户正常使用的那个系统需要进入到Recovery模式中。Android设备在启动的过程中,在默认情况下,一旦Bootloader启动完成,就会直接启动用户正常使用的那个系统,而不会进入到Recovery模式,或者停留在Bootloader中,也就是停留在Fastboot模式中。只有通过特定的命令,例如adb reboot recovery和adb reboot bootloader,或者特定的按键,例如在设备启动过程中同时按住音量减小键和电源开关键,才能让设备进入到Recovery模式或者Fastboot模式中。

一个完整的刷Rom过程有两个步骤

  1. 进入FastBoot模式,输入recovery.img镜像
  2. 进入Recovery模式,刷入包含system.img和boot.img镜像的zip包

注意:system.img和boot.img在Fastboot模式下也可以刷入,只不过Recovery模式更友好一些,这里需要提到一个Bootloader锁的概念,在锁定Bootloader的情况下,无法刷入非官方的recovery.img,system.img,boot.img镜像。这是跟厂商的Bootloader有相关的。可以通过一定的算法(例如签名)来验证要刷入的镜像是否是官方发布的。在这种情况下必须对Booloader解锁,才可以刷入非官方的镜像。

所谓定制自己的系统,就是自己制作recovery.img和system.img,boot.img。
从aosp源码中编译出能在自己使用的手机上运行的系统,并非易事,好在有很多基于aosp第三方开源项目,最著名的就是CyanogenMod,简称CM,MIUI,锤子 ,一加 ,都是基于CM开发的。

以上就是刷机概念和过程,至于原理。

打好源码底子再来补充

未完待续。。。。。

你可能感兴趣的:(android,os)