ในการใช้การอัปเดตผ่านอากาศ (OTA) บูตโหลดเดอร์ต้องเข้าถึงดิสก์ RAM การกู้คืนได้ในระหว่างการเปิดเครื่อง หากอุปกรณ์ใช้อิมเมจการกู้คืน AOSP ที่ไม่มีการแก้ไข Bootloader จะอ่าน 32 ไบต์แรกบนพาร์ติชัน misc
หากข้อมูลตรงกับ boot-recovery
บูตโหลดเดอร์จะเปิดเครื่องในอิมเมจ recovery
วิธีนี้จะทำให้มีการกู้คืนที่รอดำเนินการอยู่ทั้งหมด (เช่น การใช้ OTA หรือการนำข้อมูลออก) เพื่อดำเนินการให้เสร็จสิ้นต่อไป
สำหรับรายละเอียดเกี่ยวกับเนื้อหาของบล็อกใน Flash ที่ใช้สำหรับการสื่อสารโดยการกู้คืนและ Bootloader โปรดดูที่ bootable/recovery/bootloader_message/bootloader_message.h
อุปกรณ์ที่มีการอัปเดต A/B
หากต้องการรองรับการอัปเดต OTA ในอุปกรณ์ที่ใช้การอัปเดต A/B โปรดตรวจสอบว่า Bootloader ของอุปกรณ์เป็นไปตามเกณฑ์ต่อไปนี้
เกณฑ์ทั่วไป
พาร์ติชันทั้งหมดที่อัปเดตผ่าน OTA ควรอัปเดตได้ในขณะที่เปิดเครื่องหลัก (และไม่ได้อัปเดตในการกู้คืน)
หากต้องการบูตพาร์ติชัน
system
ตัว Bootloader จะส่งค่าต่อไปนี้ในบรรทัดคำสั่งของเคอร์เนล: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 ตัวควบคุมการเปิดเครื่องผ่าน CallbacksetActiveBootSlot
หรือด้วยคำสั่งfastboot set_active
เมื่อแก้ไขพาร์ติชันที่เป็นส่วนหนึ่งของสล็อต Bootloader จะล้าง "บูตเรียบร้อยแล้ว" และรีเซ็ตจำนวนการลองอีกครั้งสำหรับสล็อต
Bootloader ควรกำหนดช่องที่จะโหลดด้วย รูปนี้แสดงตัวอย่างกระบวนการตัดสินใจ
![ขั้นตอนสล็อต Bootloader](https://source.android.google.cn/static/docs/core/architecture/bootloader/images/bootloader_slotting.png?hl=th)
กำหนดช่องที่จะลองใช้ อย่าพยายามโหลดช่องที่มีเครื่องหมาย
slot-unbootable
สล็อตนี้ควรสอดคล้องกับค่าที่แสดงผลโดย Fastboot และเรียกว่าสล็อตปัจจุบันหากช่องปัจจุบันไม่ได้ทำเครื่องหมายเป็น
slot-successful
และมีslot-retry-count = 0
ให้ทำเครื่องหมายช่องปัจจุบันเป็นslot-unbootable
จากนั้นเลือกช่องโฆษณาอื่นที่ไม่ได้ทำเครื่องหมายเป็นunbootable
และมีการทำเครื่องหมายว่าเป็นslot-successful
ดังนั้นช่องนี้จะเป็นช่องที่เลือกไว้ หากไม่มีช่องปัจจุบันพร้อมใช้งาน ให้เปิดเครื่องเพื่อกู้คืนหรือแสดงข้อความแสดงข้อผิดพลาดที่สำคัญแก่ผู้ใช้เลือก
boot.img
ที่เหมาะสมและระบุเส้นทางไปยังพาร์ติชันระบบที่ถูกต้องในบรรทัดคำสั่งของเคอร์เนลป้อนข้อมูลพารามิเตอร์
slot_suffix
ของบรรทัดคำสั่งเคอร์เนลเปิดเครื่อง หากไม่ได้ทําเครื่องหมาย
slot-successful
ให้ลดลงslot-retry-count
ยูทิลิตี fastboot
จะกำหนดพาร์ติชันที่จะแฟลชเมื่อเรียกใช้คำสั่ง Flash ตัวอย่างเช่น เมื่อเรียกใช้คำสั่ง fastboot flash system system.img
เป็นอันดับแรก ตัวแปร current-slot
ก็จะเชื่อมโยงผลลัพธ์กับระบบเพื่อสร้างชื่อของพาร์ติชันที่ควรทำการ Flash (system_a
, system_b
เป็นต้น)
เมื่อตั้งค่าสล็อตปัจจุบันโดยใช้คำสั่ง Fastboot set_active
หรือคำสั่ง HAL setActiveBootSlot
ควบคุมการเปิดเครื่อง Bootloader ควรอัปเดตสล็อตปัจจุบัน ล้าง slot-unbootable
และ slot-successful
และรีเซ็ตจำนวนการลองซ้ำ (นี่เป็นวิธีเดียวที่จะล้าง slot-unbootable
)
อุปกรณ์ที่ไม่มีการอัปเดต A/B
หากต้องการรองรับการอัปเดต OTA ในอุปกรณ์ที่ไม่ได้ใช้การอัปเดต A/B (โปรดดูอุปกรณ์ที่อัปเดตไม่ได้ A/B) โปรดตรวจสอบว่า Bootloader ของอุปกรณ์เป็นไปตามเกณฑ์ต่อไปนี้
พาร์ติชัน
recovery
ควรมีอิมเมจที่อ่านอิมเมจระบบจากพาร์ติชันที่รองรับบางส่วน (cache
,userdata
) และเขียนลงในพาร์ติชันsystem
ได้Bootloader ควรรองรับการเปิดเครื่องในโหมดการกู้คืนโดยตรง
หากรองรับการอัปเดตรูปภาพวิทยุ พาร์ติชัน
recovery
ก็ควรจะแฟลชวิทยุได้ด้วย โดยสามารถทำได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้Bootloader กะพริบวิทยุ ในกรณีนี้ คุณควรรีบูตจากพาร์ติชันการกู้คืนกลับไปยัง Bootloader เพื่ออัปเดตให้เสร็จสมบูรณ์
อิมเมจการกู้คืนจะกะพริบวิทยุฟังก์ชันนี้จัดหาให้ เป็นไลบรารีไบนารีหรือยูทิลิตีก็ได้