Device Tree (DT) คือโครงสร้างข้อมูลที่ประกอบด้วยโหนดและพร็อพเพอร์ตี้ที่มีชื่อซึ่งอธิบายฮาร์ดแวร์ที่ตรวจไม่พบ เคอร์เนล เช่น เคอร์เนล Linux ที่ใช้ใน Android จะใช้ DT เพื่อรองรับการกำหนดค่าฮาร์ดแวร์อันหลากหลายซึ่งอุปกรณ์ที่ขับเคลื่อนโดย Android ใช้ ผู้ให้บริการฮาร์ดแวร์จะจัดหาไฟล์ซอร์สโค้ด (DTS) ของ Device Tree ของตนเอง ซึ่งจะคอมไพล์เป็นไฟล์ Device Tree Blob (DTB) โดยใช้คอมไพเลอร์ Device Tree จากนั้นไฟล์เหล่านี้จะใช้โดยโปรแกรมบูต ไฟล์ DTB มีต้นไม้อุปกรณ์แบบแบนในรูปแบบไบนารี
การวางซ้อนต้นไม้อุปกรณ์ (DTO) ช่วยให้คุณวางซ้อน DTB กลางใน DT ได้ (BLOB ต้นไม้อุปกรณ์สำหรับการวางซ้อน (DTBO)) บูตโหลดเดอร์ที่ใช้ DTO สามารถดูแลรักษา DT ของระบบบนชิป (SoC) และวางซ้อน DT สำหรับอุปกรณ์โดยเฉพาะแบบไดนามิก เพิ่มโหนดลงในต้นไม้ และเปลี่ยนแปลงพร็อพเพอร์ตี้ในต้นไม้ที่มีอยู่
การอัปเดตในรุ่น Android 9
ใน Android 9 บูตโหลดเดอร์ต้องไม่แก้ไขพร็อพเพอร์ตี้ที่กําหนดไว้ใน DTO ก่อนที่จะส่ง DTB แบบรวมไปยังเคอร์เนล
โหลด DT
การโหลด DT ใน Bootloader เกี่ยวข้องกับการสร้าง การแบ่งพาร์ติชัน และการทำงาน
รูปที่ 1 การใช้งานทั่วไปสำหรับการโหลดต้นไม้อุปกรณ์ใน Bootloader
วิธีสร้างและแฟลช DTB
1ก. ใช้ DTC (
dtc
) เพื่อคอมไพล์ DTS (.dts
) เป็น DTB (.dtb
) DTB มีรูปแบบเป็น DT แบบแบน 1ข. แฟลชไฟล์.dtb
ไปยังตำแหน่งที่เข้าถึงได้แบบรันไทม์ของบูตโหลดเดอร์ (ดูรายละเอียดด้านล่าง)หากต้องการแบ่งพาร์ติชัน ให้กำหนดตำแหน่งที่เชื่อถือได้และเข้าถึงได้ในช่วงรันไทม์ของ Bootloader ในหน่วยความจำแฟลชเพื่อใส่
.dtb
สถานที่ตัวอย่าง:รูปที่ 2 ใส่ .dtb ลงในพาร์ติชันสำหรับบูตโดย
ต่อท้าย image.gz และส่งเป็น
"kernel" ไปยัง mkbootimgรูปที่ 3 ใส่ .dtb ไว้ในพาร์ติชันที่ไม่ซ้ำกัน
(เช่น พาร์ติชัน dtb)วิธีโหลด DTB และเริ่มเคอร์เนล
- โหลด
.dtb
จากพื้นที่เก็บข้อมูลลงในหน่วยความจำ - เริ่มเคอร์เนลโดยใช้ที่อยู่หน่วยความจำของ DT ที่โหลด
- โหลด
สิ่งต่อไปที่ควรทำ
หน้านี้จะแสดงรายละเอียดเวิร์กโฟลว์ของบูตโหลดเดอร์ทั่วไปสำหรับการโหลด DT และแสดงรายการคําศัพท์ทั่วไปของ DT หน้าอื่นๆ ในส่วนนี้จะอธิบายวิธีใช้การรองรับบูตโหลดเดอร์ วิธีคอมไพล์ ยืนยัน และเพิ่มประสิทธิภาพ DTO และวิธีใช้ DT หลายรายการ นอกจากนี้ คุณยังดูรายละเอียดเกี่ยวกับไวยากรณ์ DTO และการจัดรูปแบบพาร์ติชัน DTO และ DTBO ที่จำเป็นได้ด้วย