อิมเมจการกู้คืน

ในอุปกรณ์ที่ไม่ใช่ A/B อิมเมจการกู้คืนควรมีข้อมูลจาก Device Tree BLOB (DTB) หรือ การกำหนดค่าขั้นสูงและ Power Interface (ACPI) ซ้อนทับรูปภาพ เมื่อ ที่บูตอุปกรณ์เข้าสู่การกู้คืน Bootloader จะสามารถโหลดภาพซ้อนทับที่ ใช้ได้กับอิมเมจการกู้คืน อุปกรณ์ที่รองรับ A/B (อย่างราบรื่น) อัปเดตควรใช้การกู้คืนเป็นการเปิดเครื่องแทนที่จะเป็น พาร์ติชันการกู้คืนแยกต่างหาก (โปรดดูรายละเอียดที่หัวข้อการติดตั้งใช้งาน A/B อัปเดต)

ตัวเลือกในการรวม DTBO/ACPIO การกู้คืนไว้เป็นส่วนหนึ่งของการเปิดเครื่อง/การกู้คืน รูปภาพจะแตกต่างกันไปใน Android รุ่นต่างๆ

รุ่น อัปเดตรูปแบบ การปฏิบัติตามข้อกำหนด GKI เวอร์ชันส่วนหัวเปิดเครื่อง (กำลังเปิดตัวอุปกรณ์) เวอร์ชันส่วนหัวเปิดเครื่อง (การอัปเกรดอุปกรณ์) ต้องมีอิมเมจการกู้คืนโดยเฉพาะ
11 A/B,
A/B เสมือนจริง
ใช่ 3* ไม่มี ไม่
A/B,
A/B เสมือนจริง
ไม่ 2 3 0, 1, 2, 3 ไม่
ไม่ใช่ A/B ใช่ 3 ไม่มี ใช่
ไม่ใช่ A/B ไม่ 2 3 0, 1, 2, 3 ใช่
10 (ไตรมาส) อัลฟา/เบต้า ไม่มี 2 0, 1, 2 ไม่
ไม่ใช่ A/B ไม่มี 2 0, 1, 2 ใช่
9 (จุด) อัลฟา/เบต้า ไม่มี 1 0, 1 ไม่
ไม่ใช่ A/B ไม่มี 1 0, 1 ใช่
8 (โอ) อัลฟา/เบต้า ไม่มี ไม่มี (พิจารณา 0) ไม่มี (พิจารณา 0) ไม่
ไม่ใช่ A/B ไม่มี ไม่มี (พิจารณา 0) ไม่มี (พิจารณา 0) ใช่

* อุปกรณ์ A/B ที่ใช้ Android 11 ขึ้นไปและใช้อิมเมจเคอร์เนลทั่วไป (GKI) ต้องใช้ เวอร์ชันส่วนหัวบูทหลักของ 3 จะเป็น สามารถทำงานร่วมกับการเปิดเครื่องของผู้ให้บริการ พาร์ติชัน

ประเด็นสำคัญ

  • อุปกรณ์ A/B ไม่จําเป็นต้องระบุอิมเมจการกู้คืนเนื่องจากการอัปเดต A/B ใช้ 2 ชุด ของพาร์ติชัน (รวมถึง boot และ dtbo) และสลับระหว่างพาร์ติชัน ทำให้ไม่จำเป็นต้องใช้อิมเมจการกู้คืน อุปกรณ์ A/B สามารถ ยังคงใช้อิมเมจการกู้คืนเฉพาะ

  • อุปกรณ์ที่ไม่ใช่ A/B ที่เปิดตัวด้วย Android 11 ขึ้นไป และการใช้ส่วนหัวการเปิดเครื่องเวอร์ชัน 3 ต้องระบุส่วนหัวการเปิดเครื่องอย่างชัดเจน เวอร์ชัน 2 สำหรับอิมเมจการกู้คืนแยกต่างหาก เช่น

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • สำหรับสถาปัตยกรรมที่ไม่รองรับแผนผังอุปกรณ์ อิมเมจการกู้คืนจะ ใส่รูปภาพ ACPIO แทนรูปภาพ DTBO

เกี่ยวกับความล้มเหลวของ OTA และอิมเมจการกู้คืน

เพื่อป้องกันความล้มเหลวผ่านอากาศ (OTA) ในอุปกรณ์ที่ไม่ใช่ A/B อิมเมจการกู้คืน ควรใช้งานได้เพียงพอและไม่เชื่อมโยงกับรูปภาพอื่นๆ ระหว่างการอัปเดต OTA ถ้าปัญหาเกิดขึ้นหลังจากอัปเดตภาพซ้อนทับแล้ว (แต่ก่อน การอัปเดตโดยสมบูรณ์) อุปกรณ์จะพยายามเปิดเครื่องเข้าสู่ Recovery Mode เพื่อ อัปเดต OTA ให้เสร็จสมบูรณ์ อย่างไรก็ตาม เนื่องจากพาร์ติชันการวางซ้อนได้รับ อัปเดตแล้ว อาจไม่ตรงกับอิมเมจการกู้คืน (ซึ่งไม่ได้ อัปเดตเลย)

เพื่อป้องกันไม่ให้มีการกู้คืนขึ้นอยู่กับพาร์ติชัน DTBO/ACPIO ระหว่าง อัปเดต อุปกรณ์ที่ไม่ใช่ A/B ซึ่งใช้ Android 9 ขึ้นไป สามารถระบุรูปภาพ DTBO/ACPIO สำหรับการกู้คืนที่มีข้อมูลจากการวางซ้อน รูปภาพเป็นส่วนแยกต่างหากในรูปแบบอิมเมจเปิดเครื่อง (ต้องใช้ส่วนหัวเปิดเครื่อง เวอร์ชัน 1 หรือ 2)

การเปลี่ยนแปลงอิมเมจการเปิดเครื่อง

หากต้องการอนุญาตให้อิมเมจการกู้คืนมี DTBO หรือ ACPIO สำหรับการกู้คืนที่ไม่มี A/B อุปกรณ์ที่ใช้ Android 9 ขึ้นไป ให้อัปเดตการเปิดเครื่อง โครงสร้างรูปภาพดังต่อไปนี้

ส่วนอิมเมจการเปิดเครื่อง จำนวนหน้า
ส่วนหัวของการเปิดเครื่อง (1 หน้า) 1
เคอร์เนล (หน้า l) l = (kernel_size + page_size - 1) / page_size
Ramdisk (m หน้า) นาที = (ramdisk_size + page_size - 1) / page_size
Bootloader ขั้นที่ 2 (n หน้า) n = (second_size + page_size - 1) / page_size
DTBO หรือ ACPIO สำหรับการกู้คืน (o หน้า) o = (recovery_[dtbo|acpio]_size + page_size - 1) / page_size

สำหรับรายละเอียดเกี่ยวกับอาร์กิวเมนต์เครื่องมือ mkbootimg สำหรับการระบุอิมเมจการเปิดเครื่อง เวอร์ชันส่วนหัวและเส้นทางภาพซ้อนทับ โปรดดูที่ส่วนหัวของรูปภาพรองเท้าบู๊ต การกำหนดเวอร์ชัน

นำ DTBO ไปใช้

อุปกรณ์ที่ไม่ใช่ A/B ซึ่งใช้เวอร์ชัน 9 ขึ้นไปสามารถป้อนข้อมูล ส่วน recovery_dtbo ของอิมเมจการกู้คืน วิธีใส่ recovery_dtbo รูปภาพใน recovery.img ในอุปกรณ์ BoardConfig.mk:

  • กำหนดค่า BOARD_INCLUDE_RECOVERY_DTBO เป็น true:

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • ขยายตัวแปร BOARD_MKBOOTIMG_ARGS เพื่อระบุส่วนหัวอิมเมจการเปิดเครื่อง เวอร์ชัน:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • ตรวจสอบว่าได้ตั้งค่าตัวแปร BOARD_PREBUILT_DTBOIMAGE เป็นเส้นทางของ รูปภาพ DTBO ระบบบิลด์ของ Android ใช้ตัวแปรเพื่อตั้งค่า อาร์กิวเมนต์ recovery_dtbo ของเครื่องมือ mkbootimg ในระหว่างการสร้าง และอิมเมจการกู้คืน

หาก BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGS และ มีการตั้งค่าตัวแปร BOARD_PREBUILT_DTBOIMAGE อย่างถูกต้อง ระบบบิลด์ของ Android รวม DTBO ที่ระบุโดยตัวแปร BOARD_PREBUILT_DTBOIMAGE ใน recovery.img

ใช้ ACPIO

อุปกรณ์ที่ไม่ใช่ A/B ซึ่งใช้ Android 9 ขึ้นไปสามารถใช้ ภาพซ้อนทับ ACPIO (แทนรูปภาพ DTBO) และแสดง ส่วนrecovery_acpio (แทนส่วน recovery_dtbo) ของ และอิมเมจการกู้คืน หากต้องการรวมรูปภาพ recovery_acpio ใน recovery.img ใน อุปกรณ์ BoardConfig.mk:

  • กำหนดค่า BOARD_INCLUDE_RECOVERY_ACPIO เป็น true:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • ขยายตัวแปร BOARD_MKBOOTIMG_ARGS เพื่อระบุส่วนหัวอิมเมจการเปิดเครื่อง เวอร์ชัน ตัวแปรต้องมากกว่าหรือเท่ากับ 1 เพื่อรองรับการกู้คืน ACPIO

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • ตรวจสอบว่าได้ตั้งค่าตัวแปร BOARD_RECOVERY_ACPIO เป็นเส้นทางของ รูปภาพ ACPIO ระบบบิลด์ของ Android ใช้ตัวแปรเพื่อตั้งค่า อาร์กิวเมนต์ recovery_acpio ของเครื่องมือ mkbootimg ในระหว่างการสร้าง และอิมเมจการกู้คืน

หาก BOARD_INCLUDE_RECOVERY_ACPIO, BOARD_MKBOOTIMG_ARGS และ มีการตั้งค่าตัวแปร BOARD_RECOVERY_ACPIO อย่างถูกต้อง ระบบบิลด์ของ Android รวม ACPIO ที่ระบุโดยตัวแปร BOARD_RECOVERY_ACPIO ใน recovery.img