如何单刷镜像


1. 概述

Android将启动动态分区,单刷镜像方法分为 动态分区非动态分区 两个部分。

1.1. 动态分区

介绍: https://source.android.com/devices/tech/ota/dynamic_partitions

目前,放置在动态分区(super.img)的有system/vendor/odm/product/system_ext,其余的都是非动态分区。

1.2. AVB(Android Verify Boot)

  1. 目前boot/vendor_boot/system/vendor/odm/product/system_ext分区支持AVB

    boot/system/vendor/odm/product/system_ext分区属于chained partition

    vendor_boot分区属于非chained partition,需连同vbmeta分区一起刷新

  2. bootloader/gpt/factory/env/logo/misc/dtbo/cache/userdata分区不支持AVB

1.3. 刷机关键词解释

  • fastboot

    一般指Android提供的fastboot.exe刷机工具

  • adb

    一般指Android提供的adb.exe调试工具

    注:如上两个工具可以直接在Windows的cmd终端中直接执行,形如:adb.exe flash <partition_name> <image_name>

  • fastboot mode

    一般指uboot下的fastboot mode,开发板处在fastboot mode下会阻塞等待电脑端fastboot.exe发送过来的命令。在板子处在Android开机状态下电脑端执行adb reboot bootloader进入,或者在板子uboot状态下console端执行fastboot 0进入。

  • fastbootd mode

    一般指recovery下的一个可执行档,因为动态分区需要在Linux的用户态才能识别,所以Android在新增了用户态的fastboot守护进程,可以理解成和前面的fastboot mode是一样的工作模式,差异在换到在Linux userspace阻塞等待电脑端fastboot.exe发送过来的命令。

    在板子处在Android开机状态下电脑端执行adb reboot fastboot进入,或者在板子处在fastboot mode下电脑端执行fastboot reboot fastboot进入。

  • reboot bootloader

    一般指重启到uboot并进入到fastboot mode。


2. 非动态分区单刷镜像

a)进入到fastboot mode:

adb reboot bootloader

b)待设备进入到fastboot mode,解锁设备:

fastboot oem run_cmd:"setenv unlocked 1"

fastboot oem run_cmd:"saveenv"

c1)单刷vendor_boot分区(AVB, 非chained partition):

fastboot flash vendor_boot vendor_boot.img

fastboot flash vbmeta vbmeta.img

c2)单刷system/vendor/odm/product/system_ext分区(AVB, chained partition):

fastboot flash vendor vendor.img (以vendor为例)

c3)单刷bootloader/gpt/factory/env/logo/misc/dtbo/cache/userdata分区(非AVB):

fastboot flash dtbo dtbo.img (以dtbo为例)

d)单刷完成重启进入到fastboot mode,上锁设备:

fastboot reboot bootloader

fastboot oem run_cmd:"setenv unlocked 0"

fastboot oem run_cmd:"saveenv

e)重启设备:

fastboot reboot

3. 动态分区单刷镜像

a)进入到fastboot mode:

adb reboot bootloader

b)待设备进入到fastboot mode,解锁设备,并重启进入到fastbootd:

fastboot oem run_cmd:"setenv unlocked 1"

fastboot oem run_cmd:"saveenv"

fastboot reboot fastboot

c1)等待设备重启到recovery进入到fastbootd模式,单刷vendor_boot分区(AVB, 非chained partition):

fastboot flash vendor_boot vendor_boot.img

fastboot flash vbmeta vbmeta.img

c2)等待设备重启到recovery进入到fastbootd模式,单刷system/vendor/odm/product/system_ext分区(AVB, chained partition):

fastboot flash vendor vendor.img (以vendor为例)

fastboot flash vbmeta_vendor vbmeta_vendor.img

值得注意的是,单刷system、vendor的时候,其对应的vbmeta也要烧录。

c3)等待设备重启到recovery进入到fastbootd模式,单刷bootloader/gpt/factory/env/logo/misc/dtbo/cache/userdata分区(非AVB):

fastboot flash dtbo dtbo.img (以dtbo为例)

d)单刷完成重启进入到fastboot mode,上锁设备:

fastboot reboot bootloader

fastboot oem run_cmd:"setenv unlocked 0"

fastboot oem run_cmd:"saveenv

e)重启设备:

fastboot reboot

4. 如何绕过AVB校验随意更换镜像

a)进入到fastboot mode:

adb reboot bootloader

b)待设备进入到fastboot mode,解锁设备:

fastboot oem run_cmd:"setenv unlocked 1"

fastboot oem run_cmd:"saveenv"

c)重新单刷版本包里的vbmeta.img,通过--disable-verification参数来禁用dm-verity

fastboot flash vbmeta_a vbmeta.img --disable-verification

经过上述步骤,只要不重新将uboot的unlocked的环境变量重新设置为0(重刷env.img、擦除env分区)或者破坏vbmeta分区,就可以参考前面步骤随意单独刷镜像。