การใช้งาน Android อาจมีอิมเมจ Device Tree Blob (DTB) สำหรับใช้โดย โปรแกรมโหลดบูต ตำแหน่งของรูปภาพ 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 ต้องใช้รูปแบบใดรูปแบบหนึ่งต่อไปนี้
Blob ของ DT ที่ต่อกัน 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 หน้า) | m = (ramdisk_size + page_size -
1) / page_size |
Bootloader ระยะที่ 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 หากมีไฟล์มากกว่า 1 ไฟล์ที่มีนามสกุล *.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
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 ได้สำเร็จ Bootloader ต้องรองรับอิมเมจการบูตที่อัปเดตแล้ว
และต้องเพิ่มพารามิเตอร์บรรทัดคำสั่งเคอร์เนล androidboot.dtb_idx
เพื่อระบุ
ดัชนีของ Device Tree (DT) ที่เลือก คุณระบุได้เพียง 1 ดัชนีเท่านั้น เช่น พารามิเตอร์ androidboot.dtb_idx=N
reports N
เป็นดัชนีที่อิงตาม 0 ของแผนผังอุปกรณ์ที่ Bootloader เลือกจากชุด DTB ที่อยู่ในอิมเมจการบูต