本頁說明如何部署通用開機載入程式 (GBL) 二進位檔。
啟動韌體需求
如要使用 GBL,開機韌體必須符合下列需求:
符合統一可延伸韌體介面 (UEFI) 規範。韌體必須實作並使用必要的 UEFI 通訊協定。韌體也必須允許使用定義的 UEFI 通訊協定,進行廠商專屬擴充。
安全性。韌體必須符合 Android 驗證開機程序 (AVB) 的所有規定,讓 GBL 驗證開機映像檔。
啟動模式。二進位檔應能處理各種啟動模式,例如正常啟動、復原啟動和快速啟動。
動態分區。開機韌體必須實作插槽選取邏輯,才能支援讀取正確的 A/B 開機插槽,並與超級分區中的動態分區和使用者資料相容。
OS 設定。韌體必須能夠修改核心指令列、裝置樹狀結構 (DTB) 和啟動設定,並加入啟動裝置所需的 OEM 自訂項目。
正在載入受保護的 VM,在有受保護的 VM 時,二進位檔應在 Android 核心之前,正確載入預先驗證的受保護 VM 韌體。詳情請參閱 Microdroid 啟動順序。
記憶體管理。開機韌體必須支援 UEFI 記憶體配置 API。
導入規定
如要在裝置上正確導入 GBL,必須符合下列規定:
裝置必須包含兩個 FAT32 分割區,大小為 4 MB (或更大),且在 SOC 可存取的區塊裝置上分別命名為
android_esp_a和android_esp_b。- 區塊裝置是一種儲存裝置,可讀取或寫入區塊單位的資料。例如 UFS、eMMC 和 SD 卡裝置。
- 使用 FAT32 是因為這是普遍且簡單的檔案系統。
- 在 Android 版本支援期間,無線 (OTA) 更新和回溯都需要這兩個分區。
- GBL 檔案未經壓縮時約為 2 MB。4 MB 足以因應未來七年內,因新增功能而造成的任何成長。
- 如果 GBL 有更新,您必須更新整個
android_esp_${SLOT_SUFFIX}分區。Android OTA 不支援僅更新 GBL。
部署的 GBL 版本必須是相應 GBL 發布分支的最新認證正式版。建議您使用偏好的簽署解決方案,簽署 Google 認證的 GBL 副本,並將產生的建構版本和簽章中繼資料儲存在
android_esp_${SLOT_SUFFIX}分割區中。- OEM 簽章必須保持 GBL 憑證完整無缺,且二進位檔不得套用任何標頭。
- 開發人員 GBL 建構版本僅供開發和偵錯之用。這個版本無法出貨,也不會通過 Google 認證。
GBL 必須儲存在 FAT32 分區的
/EFI/BOOT/BOOTAA64.EFI路徑中。實作必要的 UEFI 和 Android UEFI 通訊協定,以支援 GBL。如果這些介面不受支援,GBL 的正式版建構作業將無法啟動。
EFI_BLOCK_IO_PROTOCOL或EFI_BLOCK_IO2_PROTOCOL會從磁碟擷取開機 映像檔和 pvmfw 映像檔EFI_RNG_PROTOCOL,適用於堆疊 Canary、KASLR 種子和 RNG 種子- 記憶體分配服務,用於分配暫存記憶體,以執行 AVB 和 DICE 計算
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL提供無作業實作的選項,但 GBL 預設會透過這個通訊協定記錄GBL_EFI_AVB_PROTOCOL存取公開金鑰和回溯索引,驗證開機映像檔GBL_EFI_BOOT_CONTROL_PROTOCOL從韌體取得插槽中繼資料和啟動原因GBL_EFI_AVF_PROTOCOL會從 DICE 鏈產生 AVF 設定資料
整合 GBL 時強烈建議使用的 UEFI 通訊協定,請參閱「GBL UEFI 通訊協定」。
支援啟動韌體
經過修改後,下列 UEFI 韌體實作項目可支援上一節的需求,並與 GBL 搭配運作:
- EDK2 (Tianocore)。EDK2 是熱門的開放原始碼 UEFI 實作。以 EDK2 為基礎的啟動載入程式需要 GBL 支援,而 UEFI 支援已存在。
- U-Boot。這個開放原始碼開機載入程式專案用途廣泛且彈性十足,目前正為 GBL 用途取得 UEFI 相容性。
- LittleKernel (LK)。部分供應商使用的開放原始碼開機載入程式。
執行 GBL
您可以取得預先建構的 GBL 二進位檔來執行,也可以自行建構並執行。
取得並執行 GBL 二進位檔
GBL 是以單一 UEFI 應用程式二進位檔的形式發布。您可以使用 Android 的標準更新機制,獨立更新這個二進位檔,不必更新裝置的基礎韌體。
從 Android 16 開始,如果您出貨的裝置採用 ARM-64 晶片組,強烈建議您部署最新 Google 認證版本的 GBL,並將其整合至啟動鏈。
建構 GBL
如要建構 GBL:
確認已安裝 repo 工具和 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建構 UEFI 應用程式:
tools/bazel run //bootable/libbootloader:gbl_efi_dist
在 Android 虛擬裝置上測試 GBL
在 Cuttlefish 中執行 GBL:
cvd start --android_efi_loader=path_to_the_UEFI_app ...這個
cvd start指令會使用 UEFI 應用程式啟動 Android,而不是直接啟動 Android。
回報錯誤並聯絡開機載入程式團隊
如要回報 GBL 的錯誤,請前往 Buganizer 中的 Android Generic Bootloader 元件。
如有任何問題,請傳送電子郵件至 android-gbl@google.com,與 GBL 團隊聯絡。