ไวยากรณ์ DTO

รูปแบบแหล่งที่มาของแผนผังอุปกรณ์ (DTS) คือการแสดงข้อความของแผนผังอุปกรณ์ (DT) แบบข้อความ คอมไพเลอร์แผนผังอุปกรณ์ (DTC) จะประมวลผลรูปแบบนี้ใน DT แบบไบนารี ซึ่งเป็นรูปแบบที่เคอร์เนลของ Linux คาดหวัง

ใช้ข้อมูลอ้างอิง

DTC โปรเจ็กต์ (คอมไพเลอร์แผนผังอุปกรณ์ + แพตช์การวางซ้อน) อธิบายรูปแบบ DTS ใน dtc-format.txt และ manual.txt รูปแบบและกฎของ DTO ได้อธิบายไว้ใน dt-object-internal.txt เอกสารเหล่านี้อธิบายวิธีอัปเดต DT หลักโดยใช้โหนด fragment@x และไวยากรณ์ __overlay__ ใน DT แบบวางซ้อน สำหรับ ตัวอย่าง:

/ {
  fragment@0
{
    target
= <&some_node>;
      __overlay__
{
        some_prop
= "okay";
       
...
     
};
 
};
};

อย่างไรก็ตาม Google ขอแนะนำให้คุณอย่าใช้ fragment@x และไวยากรณ์ __overlay__ และใช้ ไวยากรณ์การอ้างอิง เช่น

&some_node {
  some_prop
= "okay";
 
...
};

ไวยากรณ์การอ้างอิงได้รับการรวบรวมโดย dtc เป็นออบเจ็กต์เดียวกับ ด้านบนโดยใช้ไวยากรณ์ __overlay__ ไม่ได้บังคับให้คุณใช้ กำหนดหมายเลข Fragment ซึ่งจะช่วยให้คุณอ่านและเขียน DTS แบบวางซ้อนได้อย่างง่ายดาย หาก dtc ไม่รองรับน้ำตาลสังเคราะห์นี้ โปรดใช้ dtc ใน AOSP

ใช้ป้ายกำกับ

หากต้องการอนุญาตการอ้างอิงที่ไม่ได้กำหนดไปยังโหนด ซึ่งไม่อยู่ในเวลาคอมไพล์ ค่า ไฟล์ DT .dts ที่วางซ้อนต้องมีแท็ก /plugin/ ในไฟล์ ส่วนหัว เช่น

/dts-v1/;
/plugin/;

จากที่นี่ คุณสามารถกำหนดเป้าหมายโหนดที่จะวางซ้อนโดยใช้การอ้างอิง ซึ่งเป็น เส้นทางของโหนดสัมบูรณ์ที่นำหน้าด้วยเครื่องหมายและ (&) ตัวอย่างเช่น สำหรับ node@0 ใน DT หลัก:

กำหนดป้ายกำกับใน DT หลัก ... ... จากนั้นใช้ป้ายกำกับ
[my_main_dt.dts]

/dts-v1/;

/ {
  my_node
: node@0 {
    status
= "disabled";

    my_child
: child@0 {
      value
= <0xffffffff>;
   
};
 
};
};
[my_overlay_dt.dts]

/dts-v1/;
/plugin/;

&my_node {
  status
= "okay";
};

&my_child {
  value
= <0x1>;
};

ลบล้าง

หากมีพร็อพเพอร์ตี้เป้าหมายอ้างอิงอยู่ใน DT หลัก พร็อพเพอร์ตี้ดังกล่าวจะถูกลบล้าง หลังองค์กร DTO หรือไม่เช่นนั้น ก็จะถูกเพิ่มต่อท้าย เช่น

Main.dts การซ้อนทับ.dts ผลลัพธ์ที่ผสานรวม
[my_main_dt.dts]

/dts-v1/;

/ {
  compatible
= "corp,foo";

  my_node
: node@0 {
    status
= "disabled";
 
};
};
[my_overlay_dt.dts]

/dts-v1/;
/plugin/;

&my_node {
  status
= "okay";
};
/dts-v1/;

/ {
  compatible
= "corp,foo";

 
...

  node@0
{
    linux
,phandle = <0x1>;
    phandle
= <0x1>;
    status
= "okay";
 
};
};

ต่อท้าย

หากไม่มีพร็อพเพอร์ตี้เป้าหมายข้อมูลอ้างอิงใน DT หลัก ต่อท้ายหลัง DTO เช่น

Main.dts การซ้อนทับ.dts ผลลัพธ์ที่ผสานรวม
[my_main_dt.dts]

/dts-v1/;

/ {
  compatible
= "corp,foo";

  my_node
: node@0 {
    status
= "okay";
 
};
};
[my_overlay_dt.dts]

/dts-v1/;
/plugin/;

&my_node {
  new_prop
= "bar";
};
/dts-v1/;

/ {
  compatible
= "corp,foo";

 
...

  node@0
{
    linux
,phandle = <0x1>;
    phandle
= <0x1>;
    status
= "okay";
    new_prop
= "bar";
 
};
};

โหนดย่อย

ตัวอย่างไวยากรณ์ของโหนดย่อย

Main.dts การซ้อนทับ.dts ผลลัพธ์ที่ผสานรวม
[my_main_dt.dts]

/dts-v1/;

/ {
  compatible
= "corp,foo";

  my_nodes
: nodes {
    compatible
= "corp,bar";

    node@0
{
      status
= "disabled";
   
};
 
};
};
[my_overlay_dt.dts]

/dts-v1/;
/plugin/;

&my_nodes {
  new_prop1
= "abc";

  node@0
{
    status
= "okay";
    new_prop2
= "xyz";
 
};
};
/dts-v1/;

/ {
  compatible
= "corp,foo";

 
...

  nodes
{
    linux
,phandle = <0x1>;
    phandle
= <0x1>;
    compatible
= "corp,bar";
    new_prop1
= "abc";

    node@0
{
      linux
,phandle = <0x2>;
      phandle
= <0x2>;
      status
= "okay";
      new_prop2
= "xyz";
   
};
 
};
};