部署 GBL

本页介绍了如何部署 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,请执行以下操作:

  1. 验证您是否已安装代码库工具和 Bazel 引导加载程序:

    sudo apt install repo bazel-bootstrap
    
  2. 使用 uefi-gbl-mainline 清单文件初始化当前目录以便控制源代码:

    repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline
    repo sync -j16
    
  3. 构建 EFI 应用:

    ./tools/bazel run //bootable/libbootloader:gbl_efi_dist --extra_toolchains=@gbl//toolchain:all
    
  4. 在 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