如何单刷镜像
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)¶
-
目前boot/vendor_boot/system/vendor/odm/product/system_ext分区支持AVB
boot/system/vendor/odm/product/system_ext分区属于chained partition
vendor_boot分区属于非chained partition,需连同vbmeta分区一起刷新
-
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分区,就可以参考前面步骤随意单独刷镜像。