การกู้คืนรูปภาพ

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

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

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

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

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

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

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

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

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

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

เพื่อป้องกันความล้มเหลวแบบ over-the-air (OTA) บนอุปกรณ์ที่ไม่ใช่ A/B อิมเมจการกู้คืนควรเป็นแบบพอเพียงและไม่ขึ้นกับอิมเมจอื่น ระหว่างการอัปเดต OTA หากมีปัญหาเกิดขึ้นหลังจากอัปเดตอิมเมจโอเวอร์เลย์แล้ว (แต่ก่อนที่จะอัปเดตแบบเต็ม) อุปกรณ์จะพยายามบูตเข้าสู่โหมดการกู้คืนเพื่อให้การอัปเดต 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) m = ( ramdisk_size + page_size - 1) / page_size
bootloader ขั้นตอนที่สอง (หน้า n) n = ( second_size + page_size - 1) / page_size
การกู้คืน DTBO หรือ ACPIO (หน้า) o = ( recovery_[dtbo|acpio]_size + page_size - 1) / page_size

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

การนำ DTBO ไปใช้งาน

อุปกรณ์ที่ไม่ใช่ A/B ที่ใช้ 9 หรือสูงกว่าสามารถเติมส่วน recovery_dtbo ของอิมเมจการกู้คืนได้ ในการรวมอิมเมจ recovery_dtbo ใน recovery.img ในอุปกรณ์ BoardConfig.mk :

  • ตั้งค่า config 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 :

  • ตั้งค่า config 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