ติดตั้งใช้งานการอัปเดต OTA

หากต้องการใช้การอัปเดตผ่านอากาศ (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 ควรจะอัปเดตได้ขณะที่ระบบหลักบูตอยู่ (และไม่ได้อัปเดตในการกู้คืน)

  • หากต้องการบูตพาร์ติชัน 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 การควบคุมการบูตผ่านการเรียกกลับ setActiveBootSlot หรือผ่านคำสั่ง fastboot set_active เมื่อแก้ไขพาร์ติชันที่เป็นส่วนหนึ่งของสล็อต Bootloader จะล้าง "บูตสำเร็จ" และรีเซ็ตจำนวนครั้งที่ลองใหม่สำหรับสล็อต

นอกจากนี้ Bootloader ควรระบุสล็อตที่จะโหลดด้วย รูปภาพแสดงกระบวนการตัดสินใจตัวอย่าง

ขั้นตอนการสลับสล็อต Bootloader
รูปที่ 1 โฟลว์การจัดสล็อตของ Bootloader
  1. ระบุสล็อตที่จะลอง อย่าพยายามโหลดสล็อตที่ทำเครื่องหมายเป็น slot-unbootable สล็อตนี้ควรสอดคล้องกับค่าที่ส่งคืนโดย Fastboot และเรียกว่าสล็อตปัจจุบัน

  2. หากสล็อตปัจจุบันไม่ได้ทำเครื่องหมายเป็น slot-successful และมี slot-retry-count = 0 ให้ทำเครื่องหมายสล็อตปัจจุบันเป็น slot-unbootable จากนั้นเลือกสล็อตอื่นที่ไม่ได้ทำเครื่องหมายเป็น unbootable และทำเครื่องหมายเป็น slot-successful สล็อตนี้จะเป็นสล็อตที่เลือก หากไม่มีสล็อตปัจจุบัน ให้บูตเป็นการกู้คืนหรือแสดงข้อความแสดงข้อผิดพลาดที่มีความหมายต่อผู้ใช้

  3. เลือก boot.img ที่เหมาะสมและใส่เส้นทางไปยังพาร์ติชันระบบที่ถูกต้องในบรรทัดคำสั่งของเคอร์เนล

  4. ป้อนข้อมูลพารามิเตอร์ slot_suffix ในบรรทัดคำสั่งของเคอร์เนล

  5. บูต หากไม่ได้ทำเครื่องหมายเป็น 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 เพื่อทำการอัปเดตให้เสร็จสมบูรณ์ได้

    • อิมเมจการกู้คืนจะแฟลชวิทยุ ฟังก์ชันนี้สามารถให้บริการเป็นไลบรารีหรือยูทิลิตีไบนารี