หากต้องการใช้การอัปเดตผ่านอากาศ (OTA)
Bootloader ต้องเข้าถึง RAM Disk การกู้คืนได้ในระหว่างการบูต หากอุปกรณ์
ใช้อิมเมจการกู้คืน AOSP ที่ไม่มีการแก้ไข Bootloader จะอ่าน 32 ไบต์แรก
ในพาร์ติชัน misc หากข้อมูลในพาร์ติชันดังกล่าวตรงกับ boot-recovery
Bootloader จะบูตไปยังอิมเมจ recovery วิธีนี้จะช่วยให้งานการกู้คืนที่รอดำเนินการ (เช่น การใช้ OTA หรือการนำข้อมูลออก) ดำเนินการต่อไปจนเสร็จสมบูรณ์ได้
ดูรายละเอียดเกี่ยวกับเนื้อหาของบล็อกใน Flash ที่ใช้สำหรับการสื่อสารโดย การกู้คืนและ 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 การควบคุมการบูต
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 จะล้าง "บูตสำเร็จ" และรีเซ็ตจำนวนครั้งที่ลองใหม่สำหรับสล็อต
นอกจากนี้ 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พาร์ติชันควร แฟลชวิทยุได้ด้วย ซึ่งทำได้ 2 วิธีดังนี้Bootloader จะกะพริบวิทยุ ในกรณีนี้ คุณควรจะ รีบูตจากพาร์ติชันการกู้คืนกลับไปที่ Bootloader เพื่อทำการ อัปเดตให้เสร็จสมบูรณ์ได้
อิมเมจการกู้คืนจะแฟลชวิทยุ ฟังก์ชันนี้อาจมีให้ในรูปแบบ ไลบรารีไบนารีหรือยูทิลิตี