รองรับการอัพเดท OTA

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

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

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

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

เกณฑ์ทั่วไป

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

  • ในการบูตพาร์ติชัน system bootloader จะส่งผ่านค่าต่อไปนี้บนบรรทัดคำสั่งเคอร์เนล: 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
รูปที่ 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 ควรจะสามารถแฟลชวิทยุได้เช่นกัน ซึ่งสามารถทำได้ด้วยวิธีใดวิธีหนึ่งจากสองวิธี:

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

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