ติดตั้งใช้งาน GBL

หน้านี้จะอธิบายวิธีติดตั้งใช้งานไบนารีของโปรแกรมโหลดเริ่มต้นทั่วไป (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

  1. ตรวจสอบว่าคุณได้ติดตั้งเครื่องมือ Repo และ Bazel Bootstrap แล้ว

    sudo apt install repo bazel-bootstrap
    
  2. เริ่มต้นไดเรกทอรีปัจจุบันสำหรับการควบคุมซอร์สโค้ดโดยใช้ uefi-gbl-mainlineไฟล์ Manifest โดยทำดังนี้

    repo init -u https://android.googlesource.com/kernel/manifest -b uefi-gbl-mainline
    repo sync -j16
    
  3. สร้างแอป UEFI

    tools/bazel run //bootable/libbootloader:gbl_efi_dist
    

ทดสอบ GBL ในอุปกรณ์เสมือน Android

  1. เรียกใช้ 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