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

เลือกช่องที่จะลอง อย่าพยายามโหลดสล็อตที่มีเครื่องหมาย
slot-unbootable
ช่องนี้ควรสอดคล้องกับค่าที่แสดงโดย รีบูตด่วน และเรียกว่า "ช่องปัจจุบัน"หากไม่ได้ทําเครื่องหมายช่องปัจจุบันเป็น
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) ให้ตรวจสอบว่า bootloader ของอุปกรณ์มีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้
พาร์ติชัน
recovery
ควรมีอิมเมจที่อ่านอิมเมจระบบจากพาร์ติชันที่รองรับบางพาร์ติชัน (cache
,userdata
) และเขียนลงในพาร์ติชันsystem
ได้บูตโหลดเดอร์ควรรองรับการบูตเข้าสู่โหมดการกู้คืนโดยตรง
หากระบบรองรับการอัปเดตรูปภาพวิทยุ พาร์ติชัน
recovery
ควรแฟลชวิทยุได้เช่นกัน ซึ่งทำได้ 2 วิธีดังนี้Bootloader จะแฟลชวิทยุ ในกรณีนี้ คุณควรรีบูตจากพาร์ติชันการกู้คืนกลับไปที่ Bootloader เพื่อทำการอัปเดตให้เสร็จสมบูรณ์
อิมเมจการกู้คืนจะกะพริบวิทยุ ฟังก์ชันนี้สามารถระบุเป็นไลบรารีหรือยูทิลิตีแบบไบนารี