การใช้งาน 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 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 เป็นส่วนหนึ่งของอิมเมจการกู้คืนจะปลอดภัยกว่าการใช้ 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 หน้า) | จำนวน = (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 ที่แสดงในอิมเมจการเปิดเครื่อง