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

หากต้องการใช้การอัปเดตผ่านอากาศ (OTA) Bootloader จะต้องเข้าถึงดิสก์ RAM สำหรับการกู้คืนได้ในระหว่างการบูต หากอุปกรณ์ใช้อิมเมจการกู้คืน AOSP ที่ไม่ได้แก้ไข Bootloader จะอ่าน 32 ไบต์แรกในพาร์ติชัน misc หากข้อมูลตรงกับ boot-recovery Bootloader จะบูตเข้าสู่อิมเมจ recovery วิธีนี้จะช่วยให้งานกู้คืนที่รอดำเนินการ (เช่น การใช้ OTA หรือการนำข้อมูลออก) ดำเนินการต่อจนเสร็จสมบูรณ์

ดูรายละเอียดเกี่ยวกับเนื้อหาของบล็อกในแฟลชที่ใช้สำหรับการสื่อสารโดย Recovery และ Bootloader ได้ที่ bootable/recovery/bootloader_message/bootloader_message.h

อุปกรณ์ที่มีการอัปเดต A/B

หากต้องการรองรับการอัปเดต OTA ในอุปกรณ์ที่ใช้การอัปเดต A/B ให้ตรวจสอบว่าโปรแกรมโหลดบูตของอุปกรณ์มีคุณสมบัติตรงตามเกณฑ์ต่อไปนี้

เกณฑ์ทั่วไป

  • พาร์ติชันทั้งหมดที่อัปเดตผ่าน OTA ควรอัปเดตได้ขณะที่ระบบหลักบูต (และไม่ได้อัปเดตใน Recovery)

  • หากต้องการบูตพาร์ติชัน system บูตโหลดเดอร์จะส่งค่าต่อไปนี้ในบรรทัดคำสั่งเคอร์เนล ro root=/dev/[node] rootwait init=/init

  • เฟรมเวิร์ก Android มีหน้าที่เรียก markBootSuccessfulจาก HAL Bootloader ไม่ควรทําเครื่องหมายพาร์ติชันว่าบูตสําเร็จ

รองรับ HAL การควบคุมการเปิดเครื่อง

บูตโหลดเดอร์ต้องรองรับ boot_control HAL ตามที่ระบุไว้ใน hardware/libhardware/include/hardware/boot_control.h โปรแกรมอัปเดตจะค้นหาHAL การควบคุมการบูต อัปเดตสล็อตการบูตที่ไม่ได้ใช้งาน เปลี่ยนสล็อตที่ใช้งานอยู่โดยใช้ HAL และรีบูตเข้าสู่ระบบปฏิบัติการที่อัปเดต โปรดดูรายละเอียดที่การใช้ตัวควบคุมการเปิดเครื่อง HAL

การรองรับสล็อต

บูตโหลดเดอร์ต้องรองรับฟังก์ชันการทำงานที่เกี่ยวข้องกับพาร์ติชันและสล็อต ซึ่งรวมถึง

  • ชื่อพาร์ติชันต้องมีส่วนต่อท้ายที่ระบุพาร์ติชันที่属于ช่องใดช่องหนึ่งในบูตโหลดเดอร์ สำหรับแต่ละพาร์ติชันดังกล่าวจะมีตัวแปรที่เกี่ยวข้อง has-slot:partition base name ซึ่งมีค่า yes ช่องต่างๆ จะตั้งชื่อตามลําดับตัวอักษร เช่น a, b, c เป็นต้น ซึ่งสอดคล้องกับพาร์ติชันที่มีนามสกุล _a, _b, _c เป็นต้น บูตโหลดเดอร์ควรแจ้งให้ระบบปฏิบัติการทราบว่าบูตช่องใดโดยใช้พร็อพเพอร์ตี้บรรทัดคำสั่ง 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 จะกำหนดพาร์ติชันที่จะแฟลชเมื่อเรียกใช้คำสั่งแฟลช ตัวอย่างเช่น การรันคำสั่ง 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) โปรดตรวจสอบว่า Bootloader ของอุปกรณ์เป็นไปตามเกณฑ์ต่อไปนี้

  • พาร์ติชัน recovery ควรมีอิมเมจที่อ่านอิมเมจระบบจากพาร์ติชันที่รองรับบางพาร์ติชัน (cache, userdata) และเขียนลงในพาร์ติชัน system ได้

  • Bootloader ควรรองรับการเปิดเครื่องในโหมดการกู้คืนโดยตรง

  • หากระบบรองรับการอัปเดตรูปภาพวิทยุ พาร์ติชัน recovery ควรแฟลชวิทยุได้เช่นกัน โดยสามารถทำได้ด้วยวิธีใดวิธีหนึ่งต่อไปนี้

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

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