为了支持无线 (OTA) 更新,引导加载程序必须能够在引导期间访问恢复 RAM 磁盘。如果设备使用未修改的 AOSP 恢复映像,引导加载程序会读取misc
分区上的前 32 个字节;如果那里的数据与boot-recovery
匹配,引导加载程序将引导到recovery
映像。此方法使任何待处理的恢复工作(例如,应用 OTA 或删除数据)能够继续完成。
有关恢复和引导加载程序用于通信的闪存块内容的详细信息,请参阅bootable/recovery/bootloader_message/bootloader_message.h 。
具有 A/B 更新的设备
要支持使用A/B 更新的设备上的 OTA 更新,请确保设备引导加载程序满足以下条件。
一般标准
通过 OTA 更新的所有分区都应该在主系统启动时可更新(并且在恢复时不更新)。
为了引导
system
分区,引导加载程序在内核命令行上传递以下值:ro root=/dev/[node] rootwait init=/init
。Android 框架负责从 HAL 调用
markBootSuccessful
。引导加载程序绝不应将分区标记为已成功引导。
支持启动控制HAL
引导加载程序必须支持hardware/libhardware/include/hardware/boot_control.h
中定义的boot_control
HAL。更新程序查询启动控制 HAL ,更新当前未使用的启动插槽,使用 HAL 更改活动插槽,然后重新启动到更新的操作系统。有关详细信息,请参阅实现启动控制 HAL 。
支持插槽
引导加载程序必须支持与分区和插槽相关的功能,包括:
分区名称必须包含一个后缀,用于标识哪些分区属于引导加载程序中的特定插槽。对于每个这样的分区,都有一个相应的变量
has-slot: partition base name
,其值为yes
。插槽按字母顺序命名为 a、b、c 等,对应于带有后缀_a
、_b
、_c
等的分区。引导加载程序应使用命令行属性androidboot.slot_suffix
通知操作系统引导了哪个插槽。对于使用 Android 12 或更高版本启动的设备,此属性通过 bootconfig 设置。slot-retry-count
值通过setActiveBootSlot
回调或通过fastboot set_active
命令由引导控制 HAL 重置为正值(通常为3
)。当修改属于插槽一部分的分区时,引导加载程序会清除“成功引导”并重置插槽的重试计数。
引导加载程序还应该确定要加载哪个插槽。该图显示了决策过程示例。
确定要尝试的插槽。不要尝试加载标记为
slot-unbootable
插槽。该槽位应与fastboot返回的值一致,称为当前槽位。如果当前插槽未标记为
slot-successful
并且slot-retry-count = 0
,则将当前插槽标记为slot-unbootable
。然后选择一个未标记为unbootable
且标记为slot-successful
不同插槽;该插槽现在是选定的插槽。如果当前没有可用插槽,则引导至恢复或向用户显示有意义的错误消息。选择适当的
boot.img
并在内核命令行上包含正确的系统分区路径。填充内核命令行
slot_suffix
参数。启动。如果未标记
slot-successful
,则减少slot-retry-count
。
fastboot
实用程序确定在运行任何闪存命令时要闪存哪个分区。例如,运行fastboot flash system system.img
命令首先查询current-slot
变量,然后将结果连接到 system 以生成应闪存的分区的名称( system_a
、 system_b
等)。
当使用 fastboot set_active
命令或引导控制 HAL setActiveBootSlot
命令设置当前插槽时,引导加载程序应更新当前插槽,清除slot-unbootable
和slot-successful
,并重置重试计数(这是清除 slot-unbootable 和slot-unbootable
-successful 的唯一方法) slot-unbootable
)。
没有 A/B 更新的设备
要在不使用 A/B 更新的设备上支持 OTA 更新(请参阅非 A/B 可更新设备),请确保设备引导加载程序满足以下条件。
recovery
分区应包含能够从某些支持的分区(cache
、userdata
)读取系统映像并将其写入system
分区的映像。引导加载程序应支持直接重新启动进入恢复模式。
如果支持无线电映像更新,
recovery
分区还应该能够刷新无线电。这可以通过以下两种方式之一来完成:引导加载程序使无线电闪烁。在这种情况下,应该可以从恢复分区重新引导回引导加载程序以完成更新。
恢复图像闪烁收音机。此功能可以作为二进制库或实用程序提供。