ในอุปกรณ์ที่ไม่ใช่ A/B รูปภาพการกู้คืนควรมีข้อมูลจาก Device Tree Blob (DTB) หรือรูปภาพวางซ้อน Advanced Configuration and Power Interface (ACPI) เมื่ออุปกรณ์ดังกล่าวบูตเข้าสู่การกู้คืน บูตโหลดเดอร์จะโหลดรูปภาพวางซ้อนที่เข้ากันได้กับรูปภาพการกู้คืนได้ อุปกรณ์ที่รองรับการอัปเดต 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 (Q) | อัลฟา/เบต้า | ไม่มี | 2 | 0, 1, 2 | ไม่ |
ไม่ใช่ A/B | ไม่มี | 2 | 0, 1, 2 | ใช่ | |
9 (จุด) | A/B | ไม่มี | 1 | 0, 1 | ไม่ |
ไม่ใช่ A/B | ไม่มี | 1 | 0, 1 | ใช่ | |
8 (O) | A/B | ไม่มี | ไม่มี (ถือว่า 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
สำหรับสถาปัตยกรรมที่ไม่รองรับ Device Tree นั้น อิมเมจการกู้คืนสามารถรวมอิมเมจ ACPIO แทนอิมเมจ DTBO ได้
เกี่ยวกับการอัปเดต OTA ไม่สำเร็จและรูปภาพการกู้คืน
เพื่อป้องกันไม่ให้มีการอัปเดตผ่านอากาศ (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 |
แรมดิสก์ (หน้า m) | นาที = (ramdisk_size + page_size -
1) / page_size |
บูตโหลดเดอร์ระยะที่ 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 ที่ใช้ Android 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 เพื่อรองรับการกู้คืน 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
รวม ACPIO ที่ระบุโดยตัวแปร BOARD_RECOVERY_ACPIO
ใน
recovery.img