บนอุปกรณ์ที่ไม่ใช่ A/B อิมเมจการกู้คืนควรมีข้อมูลจาก อิมเมจโอเวอร์เลย์แผนผังอุปกรณ์ (DTB) หรือ Advanced Configuration and Power Interface (ACPI) เมื่ออุปกรณ์ดังกล่าวบู๊ตเข้าสู่การกู้คืน บูตโหลดเดอร์จะสามารถโหลดอิมเมจโอเวอร์เลย์ที่เข้ากันได้กับอิมเมจการกู้คืน อุปกรณ์ที่รองรับ การอัปเดต A/B (ไร้รอยต่อ) ควรใช้การกู้คืนขณะบู๊ตแทนพาร์ติชั่นการกู้คืนแยกต่างหาก (สำหรับรายละเอียด โปรดดูที่ การใช้การอัปเดต A/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 (ถาม) | เอ/บี | ไม่มี | 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 หรือสูงกว่าและใช้ 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 หน้า) | ม. = ( ramdisk_size + page_size - 1) / page_size |
bootloader ขั้นที่สอง (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
:
ตั้งค่า 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 build จะรวม 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 เพื่อรองรับการกู้คืน ACPIOBOARD_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 build จะรวม ACPIO ที่ระบุโดยตัวแปร BOARD_RECOVERY_ACPIO
ใน recovery.img