部署 GBL

本页介绍了如何部署 GBL 二进制文件。

启动固件要求

如要使用 GBL,启动固件必须满足以下要求:

  • UEFI 合规性。固件必须实现并使用所需的 UEFI 协议。固件还必须允许使用已定义的 UEFI 协议进行供应商特定的扩展。

  • 安全性。固件必须实现 Android 启动时验证 (AVB) 的所有方面,确保仅加载经过身份验证的映像。

  • 启动模式。该二进制文件应能够处理各种启动模式,例如正常启动、恢复启动和 fastboot。

  • 动态分区。启动固件必须实现插槽选择逻辑,以便支持读取正确的 A/B 启动插槽,并与超级分区中的动态分区和 userdata 兼容。

  • 操作系统配置。固件必须能够修改内核命令行、设备树 (DTB) 和 bootconfig,并包含启动设备所需的 OEM 自定义设置。

  • 受保护的虚拟机正在加载。在存在受保护虚拟机的情况下,二进制文件应在 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. 验证您是否已安装 repo 工具和 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 命令不直接启动 Android,而是使用 EFI 应用来启动 Android。

提交 bug 并与引导加载程序团队联系

如需报告 GBL 的 bug,请前往 Buganizer 中的 Android 通用引导加载程序组件

如有疑问,请与 GBL 团队联系,发送电子邮件至 android-gbl@google.com