หากต้องการใช้การอัปเดตผ่านอากาศ (OTA)
Bootloader ต้องเข้าถึง RAM disk ของการกู้คืนได้ระหว่างการบูต หากอุปกรณ์
ใช้รูปภาพการกู้คืน AOSP ที่ไม่ได้แก้ไข Bootloader จะอ่าน 32 ไบต์แรก
ในพาร์ติชัน misc หากข้อมูลในพาร์ติชันนั้นตรงกับ boot-recovery Bootloader
จะบูตเป็นอิมเมจการกู้คืน recovery วิธีนี้ช่วยให้งานการกู้คืนที่รอดำเนินการ (เช่น การใช้ OTA หรือการนำข้อมูลออก) ดำเนินการต่อจนเสร็จสมบูรณ์
โปรดดูรายละเอียดเกี่ยวกับเนื้อหาของบล็อกในแฟลชที่การกู้คืนและ Bootloader ใช้สำหรับการสื่อสารได้ที่ bootable/recovery/bootloader_message/bootloader_message.h
อุปกรณ์ที่มีการอัปเดต A/B
หากต้องการรองรับการอัปเดต OTA ในอุปกรณ์ที่ใช้A/B การอัปเดต โปรดตรวจสอบว่า Bootloader ของอุปกรณ์เป็นไปตาม เกณฑ์ต่อไปนี้
เกณฑ์ทั่วไป
พาร์ติชันทั้งหมดที่อัปเดตผ่าน OTA ควรจะอัปเดตได้ขณะที่ระบบหลักบูตอยู่ (และไม่ได้อัปเดตในการกู้คืน)
หากต้องการบูตพาร์ติชัน
systemBootloader จะส่งค่าต่อไปนี้ในบรรทัดคำสั่งของเคอร์เนลro root=/dev/[node] rootwait init=/initเฟรมเวิร์ก Android มีหน้าที่เรียก
markBootSuccessfulจาก HAL Bootloader ไม่ควรกำหนดให้พาร์ติชันบูตสำเร็จ
การรองรับ HAL การควบคุมการบูต
Bootloader ต้องรองรับ HAL boot_control ตามที่กำหนดไว้ใน
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 จะล้าง "บูตสำเร็จ" และรีเซ็ตจำนวนครั้งที่ลองใหม่สำหรับสล็อต
นอกจากนี้ 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 เพื่อสร้างชื่อพาร์ติชันที่จะแฟลช (system_a, system_b เป็นต้น)
เมื่อตั้งค่าสล็อตปัจจุบันโดยใช้คำสั่ง set_active ของ Fastboot หรือคำสั่ง setActiveBootSlot ของ HAL การควบคุมการบูต Bootloader ควรจะอัปเดตสล็อตปัจจุบัน ล้าง slot-unbootable และ slot-successful และรีเซ็ตจำนวนครั้งที่ลองใหม่ (นี่เป็นวิธีเดียวที่จะล้าง slot-unbootable)
อุปกรณ์ที่ไม่มีการอัปเดต A/B
หากต้องการรองรับการอัปเดต OTA ในอุปกรณ์ที่ไม่ได้ใช้การอัปเดต A/B (ดู อุปกรณ์ที่อัปเดตได้แบบไม่ใช่ A/B) โปรดตรวจสอบว่า Bootloader ของอุปกรณ์เป็นไปตามเกณฑ์ต่อไปนี้
พาร์ติชัน
recoveryควรมีอิมเมจที่อ่านอิมเมจระบบจากพาร์ติชันที่รองรับ (cache,userdata) และเขียนลงในพาร์ติชันsystemได้Bootloader ควรรองรับการบูตเข้าสู่โหมดการกู้คืนโดยตรง
หากรองรับการอัปเดตรูปภาพวิทยุ พาร์ติชัน
recoveryก็ควรจะแฟลชวิทยุได้ด้วย ซึ่งทำได้ 2 วิธีดังนี้Bootloader จะแฟลชวิทยุ ในกรณีนี้ ควรจะรีบูตจากพาร์ติชันการกู้คืนกลับไปที่ Bootloader เพื่อทำการอัปเดตให้เสร็จสมบูรณ์ได้
อิมเมจการกู้คืนจะแฟลชวิทยุ ฟังก์ชันนี้สามารถให้บริการเป็นไลบรารีหรือยูทิลิตีไบนารี