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