การใช้งาน Android อาจรวมภาพ Device Tree Blob (DTB) ไว้ให้ Bootloader ใช้งาน ตำแหน่งของรูปภาพ DTB (และตัวเลือกในการระบุพารามิเตอร์รูปภาพ DTB) จะแตกต่างกันไปตามรุ่นของ Android
ใน Android 11 อุปกรณ์ที่ใช้อิมเมจเคอร์เนลทั่วไป (GKI) ต้องรองรับพาร์ติชันบูตของเวนเดอร์ ซึ่งประกอบด้วยข้อมูลเฉพาะของเวนเดอร์ทั้งหมดที่ย้ายจากพาร์ติชันบูต เนื่องจากอิมเมจ DTB มีข้อมูลที่เฉพาะเจาะจงของผู้ให้บริการ ตอนนี้อิมเมจจึงเป็นส่วนหนึ่งของพาร์ติชันบูตของผู้ให้บริการ หากต้องการระบุพารามิเตอร์รูปภาพ DTB โปรดดูส่วนหัวการบูตของผู้ให้บริการ
ใน Android 10 อุปกรณ์จะรวมอิมเมจ DTB ไว้ในพาร์ติชันบูตได้ หากต้องการระบุพารามิเตอร์ของรูปภาพ DTB โปรดดูการรวมรูปภาพ DTB ในรูปภาพบูต
ใน Android 9 และต่ำกว่า รูปภาพ DTB จะอยู่ได้ในพาร์ติชันของตัวเองหรือต่อท้ายเคอร์เนล
image.gz
เพื่อสร้างรูปภาพเคอร์เนล + DTB (ซึ่งจะส่งต่อไปยังmkbootimg
เพื่อสร้างboot.img
)
รูปแบบรูปภาพ DTB
ใน Android 10 ขึ้นไป รูปภาพ DTB ต้องใช้รูปแบบใดรูปแบบหนึ่งต่อไปนี้
DT Blob ที่ต่อต่อกัน บูตโหลดเดอร์ใช้ช่อง
totalsize
ในส่วนหัว FDT แต่ละส่วนเพื่ออ่านและแยกวิเคราะห์ Blob ที่เกี่ยวข้องพาร์ติชัน DTB/DTBO บูตโหลดเดอร์มีวิธีที่มีประสิทธิภาพในการเลือกบล็อก DT ที่ถูกต้องโดยการตรวจสอบโครงสร้าง
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 |
การกู้คืน 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
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 บูตโหลดเดอร์ต้องรองรับอิมเมจการบูตที่อัปเดตแล้ว และจะต้องเพิ่มพารามิเตอร์บรรทัดคําสั่งของเคอร์เนล androidboot.dtb_idx
เพื่อระบุดัชนีของ Device Tree (DT) ที่เลือก คุณระบุดัชนีได้เพียง 1 รายการเท่านั้น ตัวอย่างเช่น พารามิเตอร์ androidboot.dtb_idx=N
จะรายงาน N
เป็นดัชนีฐาน 0 ของต้นไม้อุปกรณ์ที่บูตโหลดเดอร์เลือกจากชุด DTB ที่มีอยู่ในภาพการบูต