เพื่อรองรับ การอัปเดตแบบ over-the-air (OTA) bootloader จะต้องสามารถเข้าถึงดิสก์ RAM การกู้คืนได้ในระหว่างการบู๊ต หากอุปกรณ์ใช้อิมเมจการกู้คืน AOSP ที่ยังไม่ได้แก้ไข bootloader จะอ่าน 32 ไบต์แรกบนพาร์ติ misc
อื่น หากข้อมูลตรงกับ boot-recovery
bootloader จะบู๊ตเข้าสู่อิมเมจ recovery
วิธีการนี้ช่วยให้การกู้คืนที่ค้างอยู่ (เช่น การใช้ OTA หรือการลบข้อมูล) สามารถดำเนินการให้เสร็จสิ้นต่อไปได้
สำหรับรายละเอียดเกี่ยวกับเนื้อหาของบล็อกในรูปแบบแฟลชที่ใช้สำหรับการสื่อสารโดยการกู้คืนและบูตโหลดเดอร์ โปรดดูที่ bootable/recovery/bootloader_message/bootloader_message.h
อุปกรณ์ที่มีการอัปเดต A/B
เพื่อรองรับการอัปเดต OTA บนอุปกรณ์ที่ใช้ การอัปเดต A/B ตรวจ สอบให้แน่ใจว่าตัวโหลดบูตของอุปกรณ์ตรงตามเกณฑ์ต่อไปนี้
เกณฑ์ทั่วไป
พาร์ติชั่นทั้งหมดที่อัพเดตผ่าน OTA ควรสามารถอัพเดตได้ในขณะที่ระบบหลักบูทอยู่ (และไม่ได้อัพเดตในการกู้คืน)
ในการบูตพาร์ติชัน
system
bootloader จะส่งผ่านค่าต่อไปนี้บนบรรทัดคำสั่งเคอร์เนล:ro root=/dev/[node] rootwait init=/init
เป็นความรับผิดชอบของเฟรมเวิร์ก Android ที่จะเรียก
markBootSuccessful
จาก HAL bootloader ไม่ควรทำเครื่องหมายพาร์ติชันว่าบู๊ตสำเร็จแล้ว
รองรับการควบคุมการบูต HAL
bootloader ต้องสนับสนุน boot_control
HAL ตามที่กำหนดไว้ใน hardware/libhardware/include/hardware/boot_control.h
) ตัวอัพเดตจะสอบถาม ตัวควบคุมการบูต HAL อัพเดตสล็อตการบูตที่ไม่ได้ใช้งานอยู่ เปลี่ยนสล็อตที่ใช้งานอยู่โดยใช้ HAL และรีบูตเข้าสู่ระบบปฏิบัติการที่อัพเดต สำหรับรายละเอียด โปรดดู ที่ การใช้การควบคุมการบูต HAL
รองรับสล็อต
Bootloader จะต้องรองรับฟังก์ชันการทำงานที่เกี่ยวข้องกับพาร์ติชันและสล็อต รวมถึง:
ชื่อพาร์ติชั่นต้องมีส่วนต่อท้ายที่ระบุว่าพาร์ติชั่นใดอยู่ในช่องใดช่องหนึ่งใน bootloader สำหรับแต่ละพาร์ติชั่นดังกล่าว จะมีตัวแปรที่สอดคล้องกัน
has-slot: partition base name
ที่มีค่าเป็นyes
ช่องต่างๆ ได้รับการตั้งชื่อตามตัวอักษรเป็น a, b, c ฯลฯ ซึ่งสอดคล้องกับพาร์ติชันที่มีส่วนต่อท้าย_a
,_b
,_c
ฯลฯ bootloader ควรแจ้งให้ระบบปฏิบัติการทราบว่าช่องใดถูกบู๊ตโดยใช้คุณสมบัติบรรทัดคำสั่งandroidboot.slot_suffix
คุณสมบัตินี้ตั้งค่าผ่าน bootconfig สำหรับอุปกรณ์ที่เปิดตัวด้วย Android 12 ขึ้นไปค่า
slot-retry-count
จะถูกรีเซ็ตเป็นค่าบวก (โดยปกติคือ3
) ไม่ว่าจะโดยการควบคุมการบูต HAL ผ่านการเรียกกลับsetActiveBootSlot
หรือผ่านคำสั่งfastboot set_active
เมื่อแก้ไขพาร์ติชันที่เป็นส่วนหนึ่งของสล็อต บูตโหลดเดอร์จะล้าง "บูตสำเร็จ" และรีเซ็ตจำนวนการลองใหม่สำหรับสล็อต
bootloader ควรกำหนดด้วยว่าจะโหลดช่องใด รูปนี้แสดงตัวอย่างกระบวนการตัดสินใจ
กำหนดช่องที่จะลอง อย่าพยายามโหลดสล็อตที่ทำเครื่องหมายว่า
slot-unbootable
สล็อตนี้ควรสอดคล้องกับค่าที่ส่งคืนโดย fastboot และเรียกว่าสล็อตปัจจุบันหากช่องปัจจุบันไม่ได้ทำเครื่องหมายว่า
slot-successful
และมีslot-retry-count = 0
ให้ทำเครื่องหมายช่องปัจจุบันเป็นslot-unbootable
จากนั้นเลือกสล็อตอื่นที่ไม่ได้ทำเครื่องหมายว่าunbootable
และทำเครื่องหมายว่าslot-successful
ช่องนี้เป็นช่องที่เลือกแล้ว หากไม่มีสล็อตปัจจุบัน ให้บู๊ตเพื่อกู้คืนหรือแสดงข้อความแสดงข้อผิดพลาดที่สำคัญแก่ผู้ใช้เลือก
boot.img
ที่เหมาะสมและรวมเส้นทางเพื่อแก้ไขพาร์ติชันระบบบนบรรทัดคำสั่งเคอร์เนลเติมพารามิเตอร์บรรทัดคำสั่งเคอร์เนล
slot_suffix
บูต หากไม่ได้ทำเครื่องหมาย
slot-successful
ให้ลดslot-retry-count
ยูทิลิตี้ fastboot
กำหนดพาร์ติชันที่จะแฟลชเมื่อรันคำสั่งแฟลชใด ๆ ตัวอย่างเช่น การรันคำสั่ง fastboot flash system system.img
ขั้นแรกจะเคียวรีตัวแปร current-slot
นั้นจึงต่อผลลัพธ์เข้ากับระบบเพื่อสร้างชื่อของพาร์ติชันที่ควรแฟลช ( system_a
, system_b
ฯลฯ)
เมื่อตั้งค่าสล็อตปัจจุบันโดยใช้คำสั่ง fastboot set_active
หรือคำสั่งการควบคุมการบูต HAL setActiveBootSlot
บูตโหลดเดอร์ควรอัพเดตสล็อตปัจจุบัน ล้าง slot-unbootable
และ slot-successful
และรีเซ็ตจำนวนการลองใหม่ (นี่เป็นวิธีเดียวที่จะล้าง slot-unbootable
)
อุปกรณ์ที่ไม่มีการอัปเดต A/B
เพื่อรองรับการอัปเดต OTA บนอุปกรณ์ที่ไม่ได้ใช้การอัปเดต A/B (ดู อุปกรณ์ที่สามารถอัปเดตที่ไม่ใช่ A/B ) ตรวจสอบให้แน่ใจว่าตัวโหลดบูตของอุปกรณ์ตรงตามเกณฑ์ต่อไปนี้
พาร์ติ
recovery
ควรมีอิมเมจที่สามารถอ่านอิมเมจระบบจากพาร์ติชันที่รองรับ (cache
userdata
) และเขียนลงในพาร์ติชันsystem
ได้bootloader ควรรองรับการรีบูตโดยตรงในโหมดการกู้คืน
หากรองรับการอัพเดตอิมเมจวิทยุ พาร์ติชั่
recovery
ควรจะสามารถแฟลชวิทยุได้เช่นกัน ซึ่งสามารถทำได้ด้วยวิธีใดวิธีหนึ่งจากสองวิธี:bootloader จะกะพริบวิทยุ ในกรณีนี้ ควรรีบูตจากพาร์ติชันการกู้คืนกลับเข้าไปใน Bootloader เพื่อให้การอัปเดตเสร็จสมบูรณ์
อิมเมจการกู้คืนจะกะพริบวิทยุ ฟังก์ชั่นนี้สามารถจัดให้มีเป็นไลบรารีไบนารีหรือยูทิลิตี้