Sintaxis de DTO

El formato de origen del árbol de dispositivos (DTS) es una representación textual de un árbol de dispositivos (DT). El compilador del árbol de dispositivos (DTC) procesa este formato y lo transforma en un DT binario, que es la forma que espera el kernel de Linux.

Usar referencias

La DTC (compilador de árbol del dispositivo + parches de superposición) describe el formato DTS en dtc-format.txt y manual.txt. El formato y las reglas de DTO se describen en dt-object-internal.txt En estos documentos, se describe cómo actualizar el DT principal con el uso de fragment@x y la sintaxis __overlay__ en la DT de superposición. Por ejemplo:

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

Sin embargo, Google recomienda que no uses fragment@x y la sintaxis __overlay__, y, en su lugar, usa el la sintaxis de referencia. Por ejemplo:

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

dtc compila la sintaxis de referencia en el mismo objeto que la anterior con la sintaxis __overlay__. Esta sintaxis no te obliga a numerar los fragmentos, lo que te permite leer y escribir DTS de superposición con facilidad. Si el dtc no admite esta sintaxis, usa la DTC en AOSP.

Usar etiquetas

Para permitir referencias indefinidas a nodos que no están presentes en el momento de la compilación, el El archivo .dts de la DT de superposición debe tener una etiqueta /plugin/ en su encabezado. Por ejemplo:

/dts-v1/;
/plugin/;

Desde aquí, puedes orientar los nodos para que se superpongan con una referencia, que es una ruta de acceso de nodo absoluta con el prefijo (&). Por ejemplo, node@0 en el DT principal:

Define etiquetas en la DT principal ... ... y, luego, usa las etiquetas.
[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>;
};

Anular

Si la propiedad de destino de referencia existe en la DT principal, se anula. después de la DTO; de lo contrario, se agregará. Por ejemplo:

main.dts superposición.dts Resultado combinado
[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";
  };
};

Adjuntar

Si la propiedad de destino de referencia no existe en el DT principal, es anexado después de la DTO. Por ejemplo:

main.dts superposición.dts Resultado combinado
[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";
  };
};

Nodos secundarios

Ejemplos de sintaxis de nodos secundarios:

main.dts superposición.dts Resultado combinado
[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";
    };
  };
};