รูปภาพ DTB

การใช้งาน Android สามารถรวมอิมเมจแผนผังอุปกรณ์ (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 หน้า) ม. = ( ramdisk_size + page_size - 1) / page_size
bootloader ขั้นที่สอง (n หน้า) n = ( second_size + page_size - 1) / page_size
การกู้คืน DTBO (o หน้า) 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 build จะเชื่อมไฟล์เข้าด้วยกันเพื่อสร้างอิมเมจ 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)

การสนับสนุนบูตโหลดเดอร์

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