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

หากต้องการใช้การอัปเดตผ่านอากาศ (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 ควรระบุช่องที่จะโหลดด้วย รูปแสดง ตัวอย่างกระบวนการตัดสินใจ

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

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