หน้านี้จะอธิบายวิธีติดตั้งใช้งานไบนารี Generic Bootloader (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 ในอุปกรณ์ได้อย่างถูกต้อง
อุปกรณ์ต้องมีพาร์ติชัน FAT 2 พาร์ติชันที่มีขนาด 8 MB (หรือใหญ่กว่า) ชื่อ
android_esp_aและandroid_esp_bในอุปกรณ์บล็อกที่ SOC เข้าถึงได้- อุปกรณ์บล็อกคืออุปกรณ์จัดเก็บข้อมูลที่อ่านหรือเขียนได้ใน หน่วยของบล็อก ตัวอย่าง ได้แก่ อุปกรณ์ UFS, eMMC และการ์ด SD
- เราใช้ FAT เนื่องจากเป็นระบบไฟล์ที่ใช้งานได้ทุกที่และตรงไปตรงมา
- เราขอแนะนำให้คุณเลือกระบบไฟล์ FAT ที่เหมาะสมกับความต้องการจาก FAT12, FAT16 และ FAT32
- ทั้ง 2 พาร์ติชันจำเป็นสำหรับการอัปเดตและการย้อนกลับผ่านอากาศ (OTA) ตลอดระยะเวลาที่ Android เวอร์ชันนี้ได้รับการสนับสนุน
- GBL มีขนาดประมาณ 2 MB เมื่อไม่มีการบีบอัด 8 MB เพียงพอต่อการ รองรับการเติบโตที่เกิดจากฟีเจอร์เพิ่มเติมในช่วง 7 ปีข้างหน้า
- ในกรณีที่มีการอัปเดต GBL คุณต้องอัปเดตพาร์ติชัน
android_esp_${SLOT_SUFFIX}ทั้งหมด Android OTA ไม่รองรับการอัปเดต GBL เท่านั้น - GUID ประเภทพาร์ติชันที่ใช้สำหรับพาร์ติชัน FAT ทั้ง 2 รายการต้องสอดคล้องกับ
GUID พาร์ติชันระบบ EFI
C12A7328-F81F-11D2-BA4B-00A0C93EC93B
GBL เวอร์ชันที่ติดตั้งใช้งานต้องเป็นบิลด์ที่ใช้งานจริงล่าสุดที่ได้รับการรับรอง จากสาขาการเผยแพร่ GBL ที่เกี่ยวข้อง เราขอแนะนำให้คุณลงนามสำเนา GBL ที่ได้รับการรับรองจาก Google โดยใช้โซลูชันการลงนามที่คุณต้องการ และจัดเก็บข้อมูลเมตาของบิลด์และลายเซ็นที่ได้ไว้ในพาร์ติชัน
android_esp_${SLOT_SUFFIX}- ลายเซ็น OEM ต้องคงใบรับรอง GBL ไว้เหมือนเดิม และต้องไม่มีส่วนหัวที่ใช้กับไบนารี
- บิลด์ GBL ของนักพัฒนาแอปใช้เพื่อวัตถุประสงค์ในการพัฒนาและแก้ไขข้อบกพร่องเท่านั้น โดยบิลด์นี้จะจัดส่งไม่ได้และไม่ได้รับการรับรองจาก Google
ต้องจัดเก็บ GBL ไว้ที่เส้นทาง
/EFI/BOOT/BOOTAA64.EFIภายในพาร์ติชัน FATติดตั้งใช้งานโปรโตคอล 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 ต้องตั้งค่าตัวแปรเหล่านี้ด้วยค่า
GBL_EFI_VENDOR_GUID5a6d92f3-a2d0-4083-91a1-a50f6c3d9830gbl_fw_api_levelต้องตั้งค่าเป็นระดับ API ของเฟิร์มแวร์แพลตฟอร์ม ซึ่งระบุระดับ API ของซอฟต์แวร์ของผู้ให้บริการ ตัวแปรนี้ต้องมีค่าเดียวกับพร็อพเพอร์ตี้ระบบro.board.api_level
โปรโตคอล UEFI ที่แนะนำอย่างยิ่งเมื่อผสานรวม GBL มีระบุไว้ในโปรโตคอล UEFI ของ GBL
การรองรับเฟิร์มแวร์บูต
การติดตั้งเฟิร์มแวร์ UEFI ต่อไปนี้จะใช้ได้กับ GBL โดยมีการแก้ไขที่จำเป็นเพื่อรองรับข้อกำหนดในส่วนก่อนหน้า
- EDK2 (Tianocore) EDK2 เป็นการใช้งาน UEFI แบบโอเพนซอร์สที่ได้รับความนิยม ต้องมีการรองรับ GBL สำหรับโปรแกรมโหลด ที่ใช้ EDK2 และมีการรองรับ UEFI อยู่แล้ว
- U-Boot โปรเจ็กต์ Bootloader แบบโอเพนซอร์สที่ยืดหยุ่นและใช้กันอย่างแพร่หลาย ซึ่งกำลังได้รับความเข้ากันได้กับ UEFI สำหรับการใช้งาน GBL
- LittleKernel (LK) โปรแกรมโหลด Bootloader โอเพนซอร์สที่ผู้ให้บริการบางรายใช้
เรียกใช้ GBL
คุณสามารถรับไบนารี GBL ที่สร้างไว้ล่วงหน้าเพื่อเรียกใช้ หรือจะสร้างเองแล้วเรียกใช้ก็ได้
ขอรับและเรียกใช้ไบนารี GBL
GBL จะจัดจำหน่ายเป็นไบนารีแอป UEFI เดียว คุณอัปเดตไบนารีนี้ แยกจากเฟิร์มแวร์ฐานของอุปกรณ์ได้โดยใช้กลไกการอัปเดตมาตรฐานของ Android
ตั้งแต่ Android 16 เป็นต้นไป หากคุณจัดส่งอุปกรณ์ที่ใช้ชิปเซ็ต ARM-64 เราขอแนะนำเป็นอย่างยิ่งให้คุณติดตั้งใช้งาน GBL เวอร์ชันล่าสุดที่ได้รับการรับรองจาก Google และผสานรวมเข้ากับห่วงโซ่การบูต
หากต้องการแก้ไขข้อบกพร่องของบิลด์ GBL นี้ คุณสามารถดาวน์โหลดอาร์ติแฟกต์ต่อไปนี้เพื่อช่วยในการ แก้ไขข้อบกพร่อง
- ตารางสัญลักษณ์ใช้ดีบักเกอร์ฮาร์ดแวร์และ GDB สำหรับบิลด์ GBL ที่ได้รับการรับรองจาก Google
- ไฟล์ Manifest จะทำการเปลี่ยนแปลงในบิลด์ที่ลงนามโดยการสร้างบิลด์ GBL นี้จากแหล่งที่มาใหม่โดยใช้
repo - บิลด์สำหรับนักพัฒนาซอฟต์แวร์ GBL ที่เกี่ยวข้องมีประโยชน์สำหรับการเริ่มต้นใช้งาน หรือการแก้ไขข้อบกพร่องที่ซับซ้อนน้อยกว่าของปัญหาที่ส่งผลกระทบต่อบิลด์สำหรับเวอร์ชันที่ลงนามแล้ว
- ตารางสัญลักษณ์มีประโยชน์สำหรับบิลด์นักพัฒนาซอฟต์แวร์ GBL ที่มี ดีบักเกอร์ฮาร์ดแวร์และ GDB
หากต้องการดูไบนารีและสัญลักษณ์ที่ผ่านการรับรองในทุกรุ่น โปรดดูบิลด์รุ่น GBL
สร้าง GBL
วิธีสร้าง GBL
ตรวจสอบว่าคุณได้ติดตั้งเครื่องมือ
repoและ Bazel Bootstrap แล้วsudo apt install repo bazel-bootstrapเริ่มต้นไดเรกทอรีปัจจุบันสำหรับการควบคุมซอร์สโค้ดโดยใช้ไฟล์ Manifest ของ
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
ทดสอบ 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