อิมเมจ DTB

การใช้งาน Android อาจรวมรูปภาพ BLOB แผนผังอุปกรณ์ (DTB) สำหรับใช้งาน Bootloader ตำแหน่งของอิมเมจ DTB (และตัวเลือกในการระบุ พารามิเตอร์รูปภาพ DTB) จะแตกต่างไปใน Android รุ่นต่างๆ

รูปแบบรูปภาพ DTB

ใน Android 10 ขึ้นไป อิมเมจ DTB จะต้องใช้อิมเมจ DTB ในรูปแบบต่อไปนี้

  • DT Blob ที่เชื่อมต่อกัน Bootloader ใช้องค์ประกอบ totalsize ในส่วนหัว FDT แต่ละรายการเพื่ออ่านและแยกวิเคราะห์ Blob ที่เกี่ยวข้อง

  • พาร์ติชัน DTB/DTBO Bootloader มีวิธีที่มีประสิทธิภาพในการเลือก แก้ไข DT BLOB ด้วยการตรวจสอบโครงสร้าง dt_table_entry (มี id, rev และ custom) ที่สามารถเก็บข้อมูลการระบุฮาร์ดแวร์สำหรับ รายการ โปรดดูรายละเอียดที่ DTB/DTBO พาร์ติชัน

รวมอิมเมจ DTB ในอิมเมจการเปิดเครื่อง

อุปกรณ์ที่ใช้ Android 10 สามารถมีอิมเมจ DTB ได้ใน อิมเมจเปิดเครื่อง ทำให้ Android ไม่จำเป็นต้องรองรับสคริปต์ที่ต่อท้าย อิมเมจ DTB เป็น image.gz ในเคอร์เนล และเปิดใช้ Vendor Test การทดสอบ Suite (VTS) เพื่อยืนยัน (และกำหนดมาตรฐาน) DTB ตำแหน่ง

นอกจากนี้ สำหรับอุปกรณ์ที่ไม่ใช่ A/B การมี DTB เป็นส่วนหนึ่งของ อิมเมจการกู้คืน ไม่ใช่ในพาร์ติชันที่แยกต่างหากเพื่อป้องกันปัญหาที่เกิดจาก OTA ที่ขัดจังหวะ ในระหว่าง OTA หากปัญหาเกิดขึ้นหลังจากพาร์ติชัน DTB (แต่ก่อนที่จะทำการอัปเดตเต็มรูปแบบ) อุปกรณ์จะพยายามเปิดเครื่อง โหมดการกู้คืนเพื่อทำ OTA ให้เสร็จสิ้น แต่เนื่องจากพาร์ติชัน DTB มีการอัปเดตแล้ว อาจไม่ตรงกับอิมเมจการกู้คืน (ซึ่งมี ยังไม่ได้รับการอัปเดต) การมีอิมเมจ DTB เป็นส่วนหนึ่งของรูปแบบอิมเมจการเปิดเครื่อง ป้องกันปัญหาดังกล่าวโดยทำให้อิมเมจการกู้คืนเพียงพอ (นั่นคือ ไม่ได้ขึ้นอยู่กับพาร์ติชันอื่น)

โครงสร้างอิมเมจการเปิดเครื่อง

อุปกรณ์ที่ใช้ Android 10 มีอิมเมจ DTB ได้ โดยใช้โครงสร้างอิมเมจการเปิดเครื่องต่อไปนี้

ส่วนอิมเมจการเปิดเครื่อง จำนวนหน้า
ส่วนหัวเปิดเครื่อง (1 หน้า) 1
เคอร์เนล (หน้า l) l = (kernel_size + page_size - 1) / page_size
Ramdisk (m หน้า) นาที = (ramdisk_size + page_size - 1) / page_size
Bootloader ขั้นที่ 2 (n หน้า) n = (second_size + page_size - 1) / page_size
DTBO การกู้คืน (o หน้า) o = (recovery_dtbo_size + page_size - 1) / page_size
DTB (หน้า P) p = (dtb_size + page_size - 1) / page_size

เส้นทางอิมเมจ DTB

สำหรับอุปกรณ์ที่ใช้ Android 10 คุณสามารถใช้ เครื่องมือ mkbootimg.py และอาร์กิวเมนต์ต่อไปนี้เพื่อระบุเส้นทางไปยัง DTB รูปภาพ

อาร์กิวเมนต์ คำอธิบาย
dtb เส้นทางไปยังอิมเมจ DTB ที่จะรวมไว้ในอิมเมจการเปิดเครื่อง/การกู้คืน
dtb_offset เมื่อเพิ่มในอาร์กิวเมนต์ base ให้ระบุน้ำหนักบรรทุก ที่อยู่สำหรับแผนผังอุปกรณ์สุดท้าย ตัวอย่างเช่น หาก base อาร์กิวเมนต์คือ 0x10000000 และอาร์กิวเมนต์ dtb_offset คือ 0x01000000 ซึ่งเป็น dtb_addr_field ในอิมเมจเปิดเครื่อง ส่วนหัวจะแสดงเป็น 0x11000000

ต้องใช้ตัวแปรการกำหนดค่ากระดาน BOARD_PREBUILT_DTBIMAGE_DIR เพื่อระบุ เส้นทางไปยังอิมเมจ DTB หากมีไฟล์ที่มีนามสกุล *.dtb มากกว่า 1 ไฟล์ อยู่ในไดเรกทอรี BOARD_PREBUILT_DTBIMAGE_DIR ระบบบิลด์ของ Android เชื่อมต่อไฟล์เพื่อสร้างอิมเมจ DTB สุดท้ายที่ใช้ในอิมเมจการเปิดเครื่อง งานสร้างสรรค์

หากต้องการส่งอาร์กิวเมนต์ dtb ไปยัง mkbootimg.py พร้อมอิมเมจ DTB จาก ไดเรกทอรี BOARD_PREBUILT_DTBIMAGE_DIR ระบุ ตัวแปรการกำหนดค่ากระดาน ต้องตั้งค่า BOARD_INCLUDE_DTB_IN_BOOTIMG เป็น true เช่น

BOARD_INCLUDE_DTB_IN_BOOTIMG := true

คุณเพิ่มอาร์กิวเมนต์ dtb_offset ต่อท้ายกระดาน BOARD_MKBOOTIMG_ARGS ได้ ตัวแปรการกำหนดค่าที่มีออฟเซ็ตและเวอร์ชันส่วนหัวอื่นๆ เช่น

BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --dtb_offset $(BOARD_DTB_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)

การรองรับ Bootloader

เพื่อให้ VTS ทำงานได้สำเร็จในอุปกรณ์ที่ใช้ Android 10 Bootloader ต้องรองรับอิมเมจการเปิดเครื่องที่อัปเดต และต้องเพิ่มพารามิเตอร์บรรทัดคำสั่งเคอร์เนล androidboot.dtb_idx เพื่อระบุ ดัชนีของแผนผังอุปกรณ์ (DT) ที่เลือก คุณระบุได้เพียงรายการเดียว (1) รายการ ดัชนี ตัวอย่างเช่น พารามิเตอร์ androidboot.dtb_idx=N รายงาน N เป็น ดัชนีแบบศูนย์ของแผนผังอุปกรณ์ที่เลือกโดย Bootloader จากชุดของ มี DTB ในอิมเมจการเปิดเครื่อง