Android 10.0 Fastboot 动态分区烧录
1.概览
1.Fastbootd简介
动态分区(Dynamic Partitions)是Android 10新增功能,是用户空间的分区系统(userspace partitioning system to Android)。
Fastbootd模式是伴随动态分区功能而引入的一项新功能。动态分区是用户空间的分区,而Bootloader是不能访问用户空间的动态分区的。因此,Android 10将原Bootloader一分为二,将用户空间的功能移动到recovery镜像形成Fastbootd模式,剩下的Bootloader功能即形成Bootloader模式。
从分区烧录角度看,Bootloader模式用于烧录和管理bootloader、radio、boot、recovery等物理分区,Fastbootd模式用于烧录和管理动态分区及super分区。
烧录和管理动态分区必须先解锁Bootloader。动态分区一般包括:system、vendor、product、odm等。
2.依赖条件
依赖条件至少包含如下:
- Android版本为10(或以上),且支持动态分区功能。
- 烧录动态分区前必须先解锁设备。
2.动态分区烧录和管理
1.烧录前准备工作
1.烧录工具
手机连接PC后,通过fastboot来烧录动态分区。
fastboot工具是Android原生的,可从Android原生SDK Platform-Tools中获取,包括Linux版本和Window版本:
Linux版Platform Tools
Windows 版Platform Tools
2.进Fastbootd模式
进入Fastbootd模式的方法有3种:
- 在正常开机后,执行adb reboot fastboot进入。
- 进入recovery模式,再通过菜单选择“Enter fastboot”进入。
- 进入Bootloader模式,执行fastboot reboot fastboot进入。
3.确保设备已解锁
烧录和管理动态分区的前提是设备解锁。在Fastbootd模式下,执行下面命令获取设备解锁状态。
fastboot getvar unlocked
yes为解锁状态,no为上锁状态。如图所示,设备处于解锁状态。
若设备未解锁,则不能烧录和管理动态分区。如图所示,执行烧录命令,会提示错误“Command not available on locked devices”。
只要bootloader解锁设备成功,Debug版本、User版本都可以烧录动态分区。
2.管理动态分区
1.判断逻辑分区
判断逻辑分区命令格式如下:
fastboot getvar is-logical:
若是逻辑分区,则返回yes;若是物理分区,则返回no。由下图可知,system分区的返回结果是yes,所以system分区是逻辑分区;boot分区返回结果是no,所以boot分区是物理分区。
2.查询逻辑分区
可以根据fastboot getvar all的结果以及关键字is-logical过滤所有的分区,在根据yes找到所有的逻辑分区。
根据以上过滤方法,可以查询到逻辑分区,如图所示:
在Linux环境下,可以使用grep命令来过滤逻辑分区
3.创建逻辑分区
创建逻辑分区命令格式如下:
fastboot create-logical-partition
创建逻辑分区如下图所示
在创建逻辑分区后,可以检查是否真的创建成功。通过fastboot getvar all过滤出所有的逻辑分区,检查是否包含自己创建的逻辑分区。
4.调整逻辑分区
调整逻辑分区命令格式如下:
fastboot resize-logical-partition
如下图所示,逻辑分区是4K字节对齐,调整逻辑分区大小为4K+1字节(4096+1字节)
执行完成后,查询此逻辑分区大小调整为8K字节,如图所示。
5.删除逻辑分区
删除逻辑分区命令格式如下:
fastboot delete-logical-partition
删除“logicaltest”的逻辑分区
在删除逻辑分区后,可以检查删除成功没有。通过fastboot getvar all过滤出所有逻辑分区查看。
3.烧录动态分区
烧录动态分区命令格式如下:
fastboot flash
动态分区都可以使用此命令烧录。如图所示。
动态分区烧录后,需要同步烧录动态分区对应的vbmeta分区,否则设备烧录后在上锁,验证启动会失败。
3.Super镜像烧录
super镜像烧录命令格式如下:
fastboot flash super super.img
烧录super镜像
4.Vbmeta镜像烧录
动态分区烧录后,需要同步烧录动态分区对应的vbmeta分区,否则设备烧录后在上锁,重启后可能无法开机。
动态分区和对应vbmeta
动态分区 | 对应vbmeta | 镜像 |
---|---|---|
System | vbmeta_system | vbmeta_system.img |
Product | vbmeta_system | vbmeta_system.img |
Vendor | vbmeta_vendor | vbmeta_vendor.img |
烧录vbmeta镜像
从分区烧录角度看,Bootloader模式可烧录bootloader、radio、boot、recovery分区,Fastbootd模式可烧录system、vendor、product等动态分区及super、vbmeta分区。
参考https://source.android.google.cn/devices/bootloader/fastbootd