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

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

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