Trang này giải thích cách triển khai tệp nhị phân Trình tải khởi động chung (GBL).
Yêu cầu về chương trình cơ sở khởi động
Để sử dụng GBL, phần sụn khởi động phải đáp ứng các yêu cầu sau:
Tuân thủ Giao diện chương trình cơ sở hợp nhất có thể mở rộng (UEFI). Chương trình cơ sở phải triển khai và sử dụng các giao thức UEFI bắt buộc. Firmware cũng phải cho phép các tiện ích dành riêng cho nhà cung cấp bằng cách sử dụng các giao thức UEFI đã xác định.
Bảo mật. Firmware phải triển khai tất cả các yêu cầu đối với quy trình Khởi động đã xác minh (AVB) của Android, cho phép GBL xác thực hình ảnh khởi động.
Chế độ khởi động. Tệp nhị phân phải có khả năng xử lý nhiều chế độ khởi động, chẳng hạn như khởi động bình thường, khởi động ở chế độ khôi phục và khởi động nhanh.
Phân vùng động. Firmware khởi động phải triển khai logic chọn vùng để hỗ trợ việc đọc vùng khởi động A/B chính xác và tương thích với các phân vùng động và dữ liệu người dùng trong siêu dữ liệu.
Cấu hình hệ điều hành. Firmware phải có khả năng sửa đổi dòng lệnh kernel, cây thiết bị (DTB) và bootconfig bằng các chế độ tuỳ chỉnh của OEM cần thiết để khởi động thiết bị.
Đang tải Protected VM. Tệp nhị phân phải tải đúng chương trình cơ sở VM được bảo vệ đã xác minh trước khi nhân Android có VM được bảo vệ. Để biết thêm thông tin, hãy xem trình tự khởi động Microdroid.
Quản lý bộ nhớ. Chương trình cơ sở khởi động phải hỗ trợ API phân bổ bộ nhớ UEFI.
Yêu cầu về việc triển khai
Để triển khai GBL một cách chính xác trên thiết bị, bạn phải đáp ứng các yêu cầu sau:
Thiết bị của bạn phải chứa 2 phân vùng FAT32 có kích thước 4 MB (hoặc lớn hơn) có tên là
android_esp_avàandroid_esp_btrên một thiết bị khối mà SOC có thể truy cập.- Thiết bị khối là một thiết bị lưu trữ có thể đọc hoặc ghi theo đơn vị khối. Ví dụ: thiết bị UFS, eMMC và thẻ SD.
- FAT32 được dùng vì đây là một hệ thống tệp đơn giản và có ở khắp mọi nơi.
- Cả hai phân vùng đều cần thiết cho các bản cập nhật và khôi phục qua mạng không dây (OTA) trong thời gian cửa sổ hỗ trợ của phiên bản Android này.
- GBL có dung lượng khoảng 2 MB khi chưa nén. 4 MB là đủ để tính đến mọi mức tăng do các tính năng bổ sung trong 7 năm tới.
- Trong trường hợp có bản cập nhật GBL, bạn phải cập nhật toàn bộ phân vùng
android_esp_${SLOT_SUFFIX}. Android OTA không hỗ trợ bản cập nhật chỉ dành cho GBL.
Phiên bản GBL được triển khai phải là bản dựng phát hành công khai được chứng nhận mới nhất từ nhánh phát hành GBL tương ứng. Bạn nên ký bản sao GBL được Google chứng nhận bằng giải pháp ký mà bạn muốn và lưu trữ bản dựng cũng như siêu dữ liệu chữ ký thu được bên trong phân vùng
android_esp_${SLOT_SUFFIX}.- Chữ ký OEM PHẢI giữ nguyên chứng chỉ GBL và không được áp dụng tiêu đề nào cho tệp nhị phân.
- Bản dựng GBL của nhà phát triển chỉ được dùng cho mục đích phát triển và gỡ lỗi. Bản dựng này không thể được phát hành và sẽ không được Google chứng nhận.
GBL phải được lưu trữ tại đường dẫn
/EFI/BOOT/BOOTAA64.EFItrong phân vùng FAT32.Triển khai các giao thức UEFI và Android UEFI bắt buộc để hỗ trợ GBL. Bản dựng phát hành của GBL không khởi động được nếu không hỗ trợ các giao diện này.
EFI_BLOCK_IO_PROTOCOLhoặcEFI_BLOCK_IO2_PROTOCOLtìm nạp hình ảnh khởi động và hình ảnh pvmfw từ ổ đĩaEFI_RNG_PROTOCOLcho các giá trị canary ngăn xếp, các giá trị ban đầu KASLR và các giá trị ban đầu RNG- Dịch vụ phân bổ bộ nhớ để phân bổ bộ nhớ tạm nhằm thực hiện các phép tính AVB và DICE
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOLcung cấp một lựa chọn cho các hoạt động triển khai không có hoạt động, nhưng GBL sẽ ghi nhật ký thông qua giao thức này theo mặc địnhGBL_EFI_AVB_PROTOCOLtruy cập vào khoá công khai và chỉ mục khôi phục để xác minh hình ảnh khởi độngGBL_EFI_BOOT_CONTROL_PROTOCOLthu thập siêu dữ liệu của khe cắm và lý do khởi động từ chương trình cơ sởGBL_EFI_AVF_PROTOCOLtạo dữ liệu cấu hình AVF từ chuỗi DICE
Các giao thức UEFI mà bạn nên dùng khi tích hợp GBL được ghi lại trong GBL UEFI Protocols (Giao thức UEFI GBL).
Hỗ trợ chương trình cơ sở khởi động
Với những sửa đổi cần thiết để hỗ trợ các yêu cầu trong phần trước, các cách triển khai phần sụn UEFI sau đây sẽ hoạt động với GBL:
- EDK2 (Tianocore). EDK2 là một cách triển khai UEFI mã nguồn mở phổ biến. Cần có sự hỗ trợ GBL cho trình tải khởi động dựa trên EDK2 và sự hỗ trợ UEFI đã có sẵn.
- U-Boot. Một dự án trình tải khởi động nguồn mở linh hoạt và được sử dụng rộng rãi, đang có khả năng tương thích với UEFI để sử dụng GBL.
- LittleKernel (LK). Một trình tải khởi động nguồn mở được một số nhà cung cấp sử dụng.
Chạy GBL
Bạn có thể lấy một tệp nhị phân GBL dựng sẵn để chạy hoặc tự dựng và chạy tệp nhị phân đó.
Lấy và chạy tệp nhị phân GBL
GBL được phân phối dưới dạng một tệp nhị phân ứng dụng UEFI duy nhất. Bạn có thể cập nhật tệp nhị phân này độc lập với chương trình cơ sở cơ bản của thiết bị bằng cơ chế cập nhật tiêu chuẩn của Android.
Kể từ Android 16, nếu phát hành một thiết bị dựa trên chipset ARM-64, bạn nên triển khai phiên bản mới nhất được Google chứng nhận của GBL và tích hợp phiên bản này vào chuỗi khởi động.
Tạo GBL
Cách tạo GBL:
Xác minh rằng bạn đã cài đặt công cụ repo và Bazel bootstrap:
sudo apt install repo bazel-bootstrapKhởi động thư mục hiện tại để kiểm soát nguồn bằng tệp kê khai
uefi-gbl-mainline:repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline repo sync -j16Tạo ứng dụng UEFI:
tools/bazel run //bootable/libbootloader:gbl_efi_dist
Kiểm thử GBL trên Thiết bị Android ảo
Chạy GBL trong Cuttlefish:
cvd start --android_efi_loader=path_to_the_UEFI_app ...Thay vì khởi động Android trực tiếp, lệnh
cvd startnày sẽ dùng ứng dụng UEFI để khởi động Android.
Báo cáo lỗi và liên hệ với nhóm phụ trách trình tải khởi động
Để báo cáo lỗi cho GBL, hãy chuyển đến thành phần Trình tải khởi động chung của Android trong Buganizer.
Nếu bạn có thắc mắc, hãy liên hệ với nhóm GBL bằng cách gửi email đến android-gbl@google.com.