การใช้งาน 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 ที่มีอยู่ในอิมเมจสำหรับบูต