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