이 페이지에서는 GBL 바이너리를 배포하는 방법을 설명합니다.
부팅 펌웨어 요구사항
GBL을 사용하려면 부팅 펌웨어가 다음 요구사항을 충족해야 합니다.
UEFI 규정 준수 펌웨어는 필요한 UEFI 프로토콜을 구현하고 사용해야 합니다. 또한 정의된 UEFI 프로토콜을 사용하는 공급업체별 확장 프로그램을 허용해야 합니다.
보안 펌웨어는 Android 자체 검사 부팅 (AVB)의 모든 측면을 구현하여 인증된 이미지만 로드되도록 해야 합니다.
부팅 모드 바이너리는 일반 부팅, 복구 부팅, 빠른 부팅과 같은 다양한 부팅 모드를 처리할 수 있어야 합니다.
동적 파티션 부팅 펌웨어는 올바른 A/B 부팅 슬롯 읽기를 지원하고 super의 동적 파티션 및 사용자 데이터와 호환되도록 슬롯 선택 로직을 구현해야 합니다.
OS 구성 기기를 부팅하는 데 필요한 OEM 맞춤설정으로 커널 명령줄, 기기 트리 (DTB), bootconfig를 수정할 수 있어야 합니다.
보호된 VM 로드 바이너리는 보호된 VM이 있는 경우 Android 커널 전에 사전 확인된 보호된 VM 펌웨어를 올바르게 로드해야 합니다. 자세한 내용은 Microdroid 부팅 시퀀스를 참고하세요.
메모리 관리 부팅 펌웨어는 UEFI 메모리 할당 API를 지원해야 합니다.
호환성 및 하위 호환성 펌웨어는 공급업체, SoC가 다른 기기에서 작동하고 해당 Android 버전과의 하위 호환성을 유지해야 합니다.
부팅 펌웨어 지원
이전 섹션의 요구사항을 지원하는 데 필요한 수정사항을 적용하면 다음 UEFI 펌웨어 구현이 GBF와 함께 작동합니다.
- EDK2 (Tianocore) EDK2는 널리 사용되는 오픈소스 UEFI 구현입니다. EDK2 기반 부트로더에는 GBL 지원이 필요하며 UEFI 지원은 이미 있습니다.
- U-Boot GBL 사용을 위한 UEFI 호환성을 얻고 있는 유연하고 널리 사용되는 오픈소스 부트로더 프로젝트입니다.
- LittleKernel (LK) 일부 공급업체에서 사용하는 오픈소스 부트로더입니다.
GBL 실행
사전 빌드된 GBL 바이너리를 가져와 실행하거나 직접 빌드하여 실행할 수 있습니다.
GBL 바이너리 가져오기 및 실행
GBL은 단일 EFI 앱 바이너리로 배포됩니다. Android의 표준 업데이트 메커니즘을 사용하여 기기의 기본 펌웨어와는 별개로 이 바이너리를 업데이트할 수 있습니다.
Android 16부터 ARM-64 칩셋을 기반으로 하는 기기를 출시하는 경우 GBL의 최신 Google 서명 버전을 배포하고 이를 부팅 체인에 통합하는 것이 좋습니다.
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
명령어는 Android를 직접 부팅하는 대신 EFI 앱을 사용하여 Android를 부팅합니다.
버그 신고 및 부트로더팀에 문의
GBL 버그를 신고하려면 Buganizer의 Android Generic Bootloader 구성요소로 이동합니다.
궁금한 점이 있으면 GBL팀에 문의하여 android-gbl@google.com
에 이메일을 보내세요.