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

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

ตัวเลือกสำหรับการรวม 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 หรือสูงกว่าและการใช้ ทั่วไป Kernel ภาพ (GKI) ต้องใช้หลัก บูตรุ่นหัว 3 ที่จะทำงานร่วมกับ พาร์ทิชันบูตผู้ขาย

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

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

  • Non-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 ไปใช้งาน

Non-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 หุ่นยนต์ที่สร้างระบบการใช้ตัวแปรในการกำหนด recovery_dtbo อาร์กิวเมนต์ของ mkbootimg เครื่องมือในระหว่างการสร้างภาพการกู้คืน

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

การนำ ACPIO ไปใช้

Non-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 หุ่นยนต์ที่สร้างระบบการใช้ตัวแปรในการกำหนด recovery_acpio อาร์กิวเมนต์ของ mkbootimg เครื่องมือในระหว่างการสร้างภาพการกู้คืน

หาก BOARD_INCLUDE_RECOVERY_ACPIO , BOARD_MKBOOTIMG_ARGS และ BOARD_RECOVERY_ACPIO ตัวแปรตั้งอย่างถูกต้อง, การสร้างระบบ Android จะประกอบด้วย ACPIO ระบุโดย BOARD_RECOVERY_ACPIO ตัวแปรใน recovery.img