Android 10 用户空间 fastboot

一、概述

Android 10通过将fastboot从bootloader转移到用户空间,增加了对可调整大小分区的支持。此重定位使得可以将代码移动和烧录到可维护且可测试的公共位置,其中仅由HAL实现fastboot的vendor专属部分。

二、统一fastboot和recovery

由于用户空间fastboot和recovery类似,因此可以将它们合并为一个分区/二进制文件。优点包括:占用空间更少,整体分区更少,以及fastboot和recovery共享kernel和lib的能力。

要支持fastbootd,bootloader必须实现boot-fastboot的新引导控制块(BCB)命令。要进入fastbootd模式,

bootloader应将boot-fastboot写入BCB消息的命令字段,并保持BCB的恢复字段不变(以启用中断恢复任务的重启)。状态,阶段和保留字段也保持不变。在BCB命令中看到boot-fastboot后,预计bootloader将加载并引导到 recovery映像中。然后recovery会解析BCB消息并切换到fastbootd模式。

1.新增的adb指令:

命令 说明
adb reboot fastboot 在system中重启会进入fastbootd;在recovery中无需重启直接进入fastbootd。

2.新增的fastboot 命令:

命令 说明
reboot recovery 在bootloader 模式下会重启进入recovery。在 fastboot 模式无需重启即可直接进入 recovery 模式。
reboot fastboot 重启进入 fastboot 模式。
getvar is-userspace 返回 yes 表示正处于fastboot 模式,返回 no 表示正处于bootloader 模式。
getvar is-logical: 若给定分区是逻辑分区,则返回yes,否则返回no。
getvar super-partition-name 返回super分区的名称。如果super分区是 A / B 分区,则该名称包括当前slot后缀。
create-logical-partition 创建具有给定名称和大小的逻辑分区。该名称不得作为逻辑分区存在。
delete-logical-partition 删除给定的逻辑分区(有效擦除分区)。
resize-logical-partition 将逻辑分区的大小调整为新大小而不更改其内容。
update-super 合并对 super 分区元数据的更改。 如果无法进行合并,则此命令将失败。可选的“erase”参数会覆盖设备的元数据,而不是执行合并。

3.仍支持旧的fastboot指令:

命令 说明
flash <partition> [<filename>] 解锁状态下向指定分区烧录image。
erase <partition> 解锁状态下擦除指定分区。
getvar <variable> all 显示bootloader变量,如果不存在则返回error。
set_active <slot> A/B系统用于设置active slot。
reboot 重启设备。
reboot-bootloader (reboot bootloader) 重启进入bootloader模式。

三、bootloader的变更

bootloader继续支持烧录 bootloader,radio和boot/recovery分区,之后设备将引导至 fastboot(用户空间)并烧录所有其他分区。bootloader还支持以下指令:

命令 说明
download 下载image。
flash recovery <image>/flash boot <image>/flash bootloader <image> 烧录boot/recovery.bootloader。
oem OEM定义的指令。

bootloader不允许烧录动态分区,会返回error,而应该在 fastbootd 中烧录分区。对于动态分区设备,fastboot 工具支持强制模式,以便在 bootloader 模式下直接烧录动态分区。例如,如果 system 是设备上的动态分区,则 fastboot –force flash 系统允许bootloader烧录分区而不是fastbootd。此强制模式旨在为工厂烧录提供灵活性,不建议开发人员使用。

四、启用 fastbootd

(1)将 fastbootd 添加到 device.mk 中的 PRODUCT_PACKAGES:

1
PRODUCT_PACKAGES + = fastbootd

(2)确保将 fastboot HAL,引导控制 HAL 和运行状况 HAL 打包为recovery image的一部分。

(3)添加 fastbootd 所需的任何特定于设备的 sepolicy 权限。例如,fastbootd 需要对特定于设备的分区进行写访问才能烧录该分区。此外,fastboot HAL 实现还可能需要特定于设备的权限。

五、GSI的烧录

(1)在Settings模块打开Developer options,勾选OEM unlock选项;

(2)执行adb reboot bootloader进入bootloader模式;

(3)执行fastboot flashing unlock并根据界面提示unlock设备;

(4)执行fastboot reboot-bootloader重启进入bootloader模式;

(5)执行fastboot flash boot_a boot-debug.img用于VTS测试;

(6)执行fastboot reboot fastboot进入fastbootd模式;

(7)执行fastboot flash system_a aosp-system.img烧录Google System Image;

(8)执行fastboot –disable-verification flash vbmeta_a vbmeta.img禁用AVB;

(9)执行fastboot reboot bootloader重启进入bootloader模式;

(10)执行fastboot -w(或fastboot flash userdata userdata.img / fastboot flash metadata meta.img)擦除用户数据;

(11)执行fastboot flashing unlock锁定设备;

(12)执行fastboot reboot进入Android准备测试。

注1:需要适用Android Q最新SDK中的fastboot.ext/adb.exe文件。

注2:若GSI是ext4格式文件(可用file aosp-system.img查看),请先用img2simg(若out/hose/linux-x86/bin目录没有该文件可编译system/core/libsparse来生成)将其转换为sparse格式再烧录。

Android 官网链接:

https://source.android.com/devices/bootloader/fastbootd