รูปภาพ DTB

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

การใช้งาน Android สามารถรวมอิมเมจ tree blob (DTB) ของอุปกรณ์สำหรับใช้โดย bootloader ตำแหน่งของอิมเมจ DTB (และตัวเลือกสำหรับการระบุพารามิเตอร์อิมเมจ DTB) จะแตกต่างกันไปตามรุ่นของ Android

  • ใน Android 11 อุปกรณ์ที่ใช้ Generic Kernel Image (GKI) จะต้องสนับสนุน พาร์ติชันสำหรับเริ่มระบบของผู้ขาย ซึ่งรวมถึงข้อมูลเฉพาะของผู้ขายทั้งหมดซึ่งถูกย้ายจากพาร์ติชันสำหรับเริ่มระบบ เนื่องจากอิมเมจ DTB มีข้อมูลเฉพาะผู้จำหน่าย ตอนนี้จึงเป็นส่วนหนึ่งของพาร์ติชันสำหรับเริ่มระบบของผู้จำหน่าย ในการระบุพารามิเตอร์อิมเมจ DTB โปรดดูที่ ส่วนหัวการบูตของผู้จำหน่าย

  • ใน Android 10 อุปกรณ์สามารถรวมอิมเมจ DTB ไว้ในพาร์ติชันสำหรับเริ่มระบบ ในการระบุพารามิเตอร์อิมเมจ DTB โปรดดู ที่การรวมอิมเมจ DTB ในอิมเมจสำหรับบูต

  • ใน Android 9 และต่ำกว่า อิมเมจ DTB สามารถมีอยู่ในพาร์ติชั่นของตัวเองหรือต่อท้ายเคอร์เนล image.gz เพื่อสร้างเคอร์เนล + อิมเมจ DTB (ซึ่งจะถูกส่งต่อไปยัง mkbootimg เพื่อสร้าง boot.img )

รูปแบบภาพ DTB

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

  • DT blobs ต่อกัน 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) m = ( ramdisk_size + page_size - 1) / page_size
bootloader ขั้นตอนที่สอง (หน้า n) n = ( second_size + page_size - 1) / page_size
การกู้คืน DTBO (หน้า) o = ( recovery_dtbo_size + page_size - 1) / page_size
DTB (หน้า) 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

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

ในการส่งอาร์กิวเมนต์ dtb ไปยัง mkbootimg.py ด้วยอิมเมจ DTB จากไดเร็กทอรีที่ระบุโดย BOARD_PREBUILT_DTBIMAGE_DIR จะต้องตั้งค่าตัวแปร config ของบอร์ด 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 ได้สำเร็จ โปรแกรมโหลดบูตต้องสนับสนุนอิมเมจสำหรับบูตที่อัปเดตและต้องเพิ่มพารามิเตอร์บรรทัดคำสั่งเคอร์เนล androidboot.dtb_idx เพื่อระบุดัชนีของโครงสร้างอุปกรณ์ที่เลือก (DT) คุณสามารถระบุดัชนีได้เพียงหนึ่ง (1) รายการเท่านั้น ตัวอย่างเช่น พารามิเตอร์ androidboot.dtb_idx=N จะรายงาน N เป็นดัชนีแบบ zero-based ของโครงสร้างอุปกรณ์ที่เลือกโดย bootloader จากชุดของ DTB ที่มีอยู่ในอิมเมจสำหรับบูต