รูปภาพ DTB

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

  • ใน Android 11 อุปกรณ์ที่ใช้ ทั่วไป Kernel ภาพ (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 แต่ละคนที่จะอ่านและแยกหยดที่สอดคล้องกัน

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

รวมอิมเมจ DTB ในอิมเมจบูต

อุปกรณ์ที่ใช้ Android 10 สามารถรวมอิมเมจ DTB ไว้ในอิมเมจสำหรับบูตได้ นี้จะเอาความจำเป็นสำหรับ Android สคริปต์การสนับสนุนที่ผนวกภาพ DTB ไป image.gz ใน kernel และช่วยให้การใช้งานของ ผู้ขาย 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

ตัวแปรที่คณะกรรมการกำหนดค่า BOARD_PREBUILT_DTBIMAGE_DIR ต้องใช้ในการระบุเส้นทางไปยังภาพ DTB หากมีมากกว่าหนึ่งไฟล์ที่มีนามสกุล *.dtb อยู่ในไดเรกทอรี 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 ตัวแปร config ของคณะกรรมการที่มีชดเชยอื่น ๆ และรุ่นหัว ตัวอย่างเช่น:

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 เป็นดัชนี zero-based ของต้นไม้อุปกรณ์ที่เลือกโดย bootloader จากชุดของ DTBs ปัจจุบันในภาพบูต