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