อิมเมจ DTB

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

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

ใน Android 10 ขึ้นไป รูปภาพ DTB ต้องใช้รูปแบบใดรูปแบบหนึ่งต่อไปนี้

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

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

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

อุปกรณ์ที่ใช้ Android 10 สามารถรวมอิมเมจ DTB ไว้ในอิมเมจบูตได้ ซึ่งทำให้ Android ไม่ต้องรองรับสคริปต์ที่เพิ่มไฟล์ DTB ต่อท้าย image.gz ในเคอร์เนล และสามารถใช้การทดสอบชุดทดสอบของผู้ให้บริการ (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
แรมดิสก์ (หน้า m) m = (ramdisk_size + page_size - 1) / page_size
บูตโหลดเดอร์ระยะที่ 2 (n หน้า) n = (second_size + page_size - 1) / page_size
Recovery DTBO (o pages) 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 เป็นดัชนีฐาน 0 ของ Device Tree ที่ Boot Loader เลือกจากชุด DTB ที่มีอยู่ในภาพการบูต