本页介绍了如何部署 GBL 二进制文件。
启动固件要求
如需使用 GBL,启动固件必须满足以下要求:
符合 UEFI 要求。固件必须实现并使用所需的 UEFI 协议。固件还必须允许使用定义的 UEFI 协议实现特定于供应商的扩展。
安全性。固件必须实现 Android 启动时验证 (AVB) 的所有方面,确保仅加载经过身份验证的映像。
启动模式。该二进制文件应能够处理各种启动模式,例如正常启动、恢复启动和 fastboot。
动态分区。引导固件必须实现槽位选择逻辑,以便支持读取正确的 A/B 引导槽位,并与 super 中的动态分区和 userdata 兼容。
操作系统配置。固件必须能够使用启动设备所需的 OEM 自定义修改内核命令行、设备树 (DTB) 和 bootconfig。
正在加载受保护的虚拟机。在存在受保护虚拟机的情况下,二进制文件应在 Android 内核之前正确加载预验证的受保护虚拟机固件。如需了解详情,请参阅 Microdroid 启动顺序。
内存管理。启动固件必须支持 UEFI 内存分配 API。
兼容性和向后兼容性。固件应适用于具有不同供应商、SoC 的设备,并与相应的 Android 版本保持向后兼容性。
启动固件支持
在进行必要的修改以支持上一部分中的要求后,以下 UEFI 固件实现可与 GBF 搭配使用:
- EDK2 (Tianocore)。EDK2 是一种流行的开源 UEFI 实现。基于 EDK2 的引导加载程序需要 GBL 支持,并且已经提供 UEFI 支持。
- U-Boot。一种灵活且广泛使用的开源引导加载程序项目,正在获得 UEFI 兼容性,以便用于 GBL。
- LittleKernel (LK)。某些供应商使用的开源引导加载程序。
运行 GBL
您可以获取预构建的 GBL 二进制文件进行运行,也可以自行构建并运行。
获取并运行 GBL 二进制文件
GBL 以单个 EFI 应用二进制文件的形式分发。您可以使用 Android 的标准更新机制,独立于设备的基础固件更新此二进制文件。
从 Android 16 开始,如果您发布基于 ARM-64 芯片组的设备,我们强烈建议您部署最新的 Google 签名版 GBL,并将其集成到启动链中。
构建并运行 GBL
如需构建和运行 GBL,请执行以下操作:
验证您是否已安装代码库工具和 Bazel 引导加载程序:
sudo apt install repo bazel-bootstrap
使用
uefi-gbl-mainline
清单文件初始化当前目录以便控制源代码:repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline repo sync -j16
构建 EFI 应用:
./tools/bazel run //bootable/libbootloader:gbl_efi_dist --extra_toolchains=@gbl//toolchain:all
在 Cuttlefish 中运行 EFI 应用:
cvd start --android_efi_loader=path_to_the_EFI_app ...
此
cvd start
命令使用 EFI 应用启动 Android,而不是直接启动 Android。
提交 bug 并与引导加载程序团队联系
如需报告 GBL 的 bug,请前往 Buganizer 中的 Android 通用引导加载程序组件。
如有任何疑问,请与 GBL 团队联系,并发送电子邮件至 android-gbl@google.com
。