หน้านี้จะอธิบายวิธีติดตั้งใช้งานไบนารีของโปรแกรมโหลดเริ่มต้นทั่วไป (GBL)
ข้อกำหนดของเฟิร์มแวร์บูต
หากต้องการใช้ GBL เฟิร์มแวร์การบูตต้องเป็นไปตามข้อกำหนดต่อไปนี้
การปฏิบัติตามข้อกำหนดของ Unified Extensible Firmware Interface (UEFI) เฟิร์มแวร์ต้อง ใช้และใช้โปรโตคอล UEFI ที่จำเป็น เฟิร์มแวร์ต้องอนุญาตให้ใช้ ส่วนขยายเฉพาะของผู้ให้บริการโดยใช้โปรโตคอล UEFI ที่กำหนดด้วย
ความปลอดภัย เฟิร์มแวร์ต้องใช้ข้อกำหนดทั้งหมดสำหรับการเปิดเครื่องที่ได้รับการยืนยัน (AVB) ของ Android เพื่อให้ GBL สามารถตรวจสอบสิทธิ์รูปภาพการเปิดเครื่องได้
โหมดการเปิดเครื่อง ไบนารีควรจัดการโหมดการบูตต่างๆ ได้ เช่น การบูตปกติ การบูตการกู้คืน และ Fastboot
การแบ่งพาร์ติชันแบบไดนามิก เฟิร์มแวร์การบูตต้องใช้ตรรกะการเลือกสล็อตเพื่อให้รองรับการอ่านสล็อตการบูต A/B ที่ถูกต้องและเข้ากันได้กับพาร์ติชันแบบไดนามิกและ userdata ใน Super
การกำหนดค่าระบบปฏิบัติการ เฟิร์มแวร์ต้องสามารถแก้ไขบรรทัดคำสั่งเคอร์เนล แผนผังอุปกรณ์ (DTB) และ bootconfig ด้วยการปรับแต่ง OEM ที่จำเป็นต่อการบูตอุปกรณ์
กำลังโหลด VM ที่มีการป้องกัน ไบนารีควรโหลดเฟิร์มแวร์ VM ที่ได้รับการป้องกันซึ่งได้รับการยืนยันล่วงหน้าอย่างถูกต้องก่อนเคอร์เนล Android ในกรณีที่มี VM ที่ได้รับการป้องกัน ดูข้อมูลเพิ่มเติมได้ที่ลำดับการบูตของ Microdroid
การจัดการหน่วยความจำ เฟิร์มแวร์สำหรับบูตต้องรองรับ API การจัดสรรหน่วยความจำ UEFI
ข้อกำหนดในการใช้งาน
คุณต้องมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้จึงจะติดตั้งใช้งาน GBL ในอุปกรณ์ได้อย่างถูกต้อง
อุปกรณ์ต้องมีพาร์ติชัน FAT32 จำนวน 2 พาร์ติชันที่มีขนาด 4 MB (หรือใหญ่กว่า) ชื่อ
android_esp_aและandroid_esp_bในอุปกรณ์แบบบล็อกที่ SOC เข้าถึงได้- อุปกรณ์บล็อกคืออุปกรณ์จัดเก็บข้อมูลที่สามารถอ่านหรือเขียนได้ใน หน่วยของบล็อก ตัวอย่าง ได้แก่ อุปกรณ์ UFS, eMMC และการ์ด SD
- เราใช้ FAT32 เนื่องจากเป็นระบบไฟล์ที่ใช้งานได้ทุกที่และตรงไปตรงมา
- ทั้ง 2 พาร์ติชันจำเป็นสำหรับการอัปเดตและการย้อนกลับแบบ Over-The-Air (OTA) ในช่วงระยะเวลาการสนับสนุน Android เวอร์ชันนี้
- GBL มีขนาดประมาณ 2 MB เมื่อไม่ได้บีบอัด 4 MB เพียงพอต่อการ รองรับการเติบโตที่เกิดจากฟีเจอร์เพิ่มเติมในช่วง 7 ปีข้างหน้า
- ในกรณีที่มีการอัปเดต GBL คุณต้องอัปเดตพาร์ติชัน
android_esp_${SLOT_SUFFIX}ทั้งหมด Android OTA ไม่รองรับการอัปเดต GBL เท่านั้น
GBL เวอร์ชันที่ติดตั้งใช้งานต้องเป็นบิลด์ที่ใช้งานจริงล่าสุดที่ได้รับการรับรอง จากสาขาการเผยแพร่ GBL ที่เกี่ยวข้อง เราขอแนะนำให้คุณลงนามสำเนา GBL ที่ได้รับการรับรองจาก Google โดยใช้โซลูชันการลงนามที่คุณต้องการ และจัดเก็บข้อมูลเมตาของบิลด์และลายเซ็นที่ได้ไว้ในพาร์ติชัน
android_esp_${SLOT_SUFFIX}- ลายเซ็นของ OEM ต้องคงใบรับรอง GBL ไว้ตามเดิมและต้องไม่มีส่วนหัวที่ใช้กับไบนารี
- บิลด์ GBL ของนักพัฒนาซอฟต์แวร์ใช้เพื่อวัตถุประสงค์ในการพัฒนาและแก้ไขข้อบกพร่องเท่านั้น โดยบิลด์นี้จะจัดส่งไม่ได้และไม่ได้รับการรับรองจาก Google
โดยต้องจัดเก็บ GBL ไว้ที่เส้นทาง
/EFI/BOOT/BOOTAA64.EFIภายในพาร์ติชัน FAT32ใช้โปรโตคอล UEFI และ Android UEFI ที่จำเป็นเพื่อรองรับ GBL บิลด์เวอร์ชันที่ใช้งานจริงของ GBL จะบูตไม่สำเร็จหากไม่รองรับอินเทอร์เฟซเหล่านี้
EFI_BLOCK_IO_PROTOCOLหรือEFI_BLOCK_IO2_PROTOCOLจะดึงข้อมูลอิมเมจบูต และอิมเมจ pvmfw จากดิสก์EFI_RNG_PROTOCOLสำหรับ Stack Canary, Seed ของ KASLR และ Seed ของ RNG- บริการจัดสรรหน่วยความจำสำหรับการจัดสรรหน่วยความจำชั่วคราวเพื่อทำการคำนวณ AVB และ DICE
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOLมีตัวเลือกสำหรับการติดตั้งใช้งานแบบไม่มีการดำเนินการ แต่ GBL จะบันทึกผ่านโปรโตคอลนี้โดยค่าเริ่มต้นGBL_EFI_AVB_PROTOCOLเข้าถึงคีย์สาธารณะและดัชนีการย้อนกลับเพื่อยืนยัน อิมเมจการบูตGBL_EFI_BOOT_CONTROL_PROTOCOLจะรับข้อมูลเมตาสล็อตและเหตุผลในการบูต จากเฟิร์มแวร์GBL_EFI_AVF_PROTOCOLสร้างข้อมูลการกำหนดค่า AVF จากเชน DICE
โปรโตคอล UEFI ที่แนะนำอย่างยิ่งเมื่อผสานรวม GBL มีระบุไว้ในโปรโตคอล UEFI ของ GBL
การรองรับเฟิร์มแวร์บูต
การติดตั้งเฟิร์มแวร์ UEFI ต่อไปนี้จะใช้ได้กับ GBL โดยมีการแก้ไขที่จำเป็นเพื่อรองรับข้อกำหนดในส่วนก่อนหน้า
- EDK2 (Tianocore) EDK2 เป็นการใช้งาน UEFI แบบโอเพนซอร์สที่ได้รับความนิยม ต้องมีการรองรับ GBL สำหรับโปรแกรมโหลด ที่ใช้ EDK2 และมีการรองรับ UEFI อยู่แล้ว
- U-Boot โปรเจ็กต์ Bootloader แบบโอเพนซอร์สที่ยืดหยุ่นและใช้กันอย่างแพร่หลาย ซึ่งกำลังได้รับความเข้ากันได้กับ UEFI สำหรับการใช้งาน GBL
- LittleKernel (LK) โปรแกรมโหลด โอเพนซอร์สที่ผู้ให้บริการบางรายใช้
เรียกใช้ GBL
คุณสามารถรับไบนารี GBL ที่สร้างไว้ล่วงหน้าเพื่อเรียกใช้ หรือจะสร้างเองแล้วเรียกใช้ก็ได้
รับและเรียกใช้ไบนารี GBL
GBL จะจัดจำหน่ายเป็นไบนารีแอป UEFI เดียว คุณอัปเดตไบนารีนี้ แยกจากเฟิร์มแวร์ฐานของอุปกรณ์ได้โดยใช้กลไกการอัปเดตมาตรฐานของ Android
ตั้งแต่ Android 16 เป็นต้นไป หากคุณจัดส่งอุปกรณ์ที่ใช้ชิปเซ็ต ARM-64 เราขอแนะนำเป็นอย่างยิ่งให้คุณติดตั้งใช้งาน GBL เวอร์ชันล่าสุดที่ได้รับการรับรองจาก Google และผสานรวมเข้ากับห่วงโซ่การบูต
สร้าง GBL
วิธีสร้าง GBL
ตรวจสอบว่าคุณได้ติดตั้งเครื่องมือ Repo และ Bazel Bootstrap แล้ว
sudo apt install repo bazel-bootstrapเริ่มต้นไดเรกทอรีปัจจุบันสำหรับการควบคุมซอร์สโค้ดโดยใช้
uefi-gbl-mainlineไฟล์ Manifest โดยทำดังนี้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
ทดสอบ GBL ในอุปกรณ์เสมือน Android
เรียกใช้ GBL ภายใน Cuttlefish โดยทำดังนี้
cvd start --android_efi_loader=path_to_the_UEFI_app ...คำสั่ง
cvd startนี้ใช้แอป UEFI เพื่อบูต Android แทนการบูต Android โดยตรง
รายงานข้อบกพร่องและติดต่อทีม Bootloader
หากต้องการรายงานข้อบกพร่องสำหรับ GBL ให้ไปที่คอมโพเนนต์โปรแกรมโหลดบูตทั่วไปของ Android ใน Buganizer
หากมีคำถาม โปรดติดต่อทีม GBL โดยส่งอีเมลไปที่ android-gbl@google.com