Google is committed to advancing racial equity for Black communities. See how.
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Sintassi DTO

Il formato Device Tree Source (DTS) è una rappresentazione testuale di un albero dei dispositivi. Il Device Tree Compiler (DTC) elabora questo formato in un albero binario dei dispositivi, che è il formato previsto dal kernel Linux.

Usare i riferimenti

Il progetto DTC (Device Tree compiler + overlay patches) descrive il formato DTS in dtc-format.txt e manual.txt . Il formato e le regole DTO sono descritti in dt-object-internal.txt . Questi documenti descrivono come aggiornare il DT principale usando il fragment@x nodo fragment@x e la sintassi __overlay__ in overlay DT. Per esempio:

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

Tuttavia, Google consiglia vivamente di non utilizzare fragment@x e la sintassi __overlay__ e di utilizzare invece la sintassi di riferimento. Per esempio:

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

La sintassi di riferimento viene compilata da dtc nello stesso oggetto del precedente utilizzando la sintassi __overlay__ . Questa sintassi non obbliga a numerare i frammenti, consentendo di leggere e scrivere facilmente DTS in sovrimpressione. Se il tuo dtc non supporta questo zucchero sintattico, usa il dtc in AOSP .

Utilizzo di etichette

Per consentire riferimenti indefiniti a nodi non presenti al momento della compilazione, il file DT .dts sovrimpressione deve avere un tag /plugin/ nell'intestazione. Per esempio:

/dts-v1/;
/plugin/;

Da qui puoi scegliere come target i nodi da sovrapporre utilizzando un riferimento, che è un percorso di nodo assoluto preceduto da una e commerciale (&). Ad esempio, per il node@0 nel DT principale:

Definisci le etichette nel DT principale ... ... quindi usa le etichette.
[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>;
};

Overriding

Se la proprietà della destinazione di riferimento esiste nel DT principale, viene sovrascritta dopo DTO; in caso contrario, viene aggiunto. Per esempio:

main.dts overlay.dts Risultato unito
[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";
  };
};

Aggiunta

Se la proprietà della destinazione di riferimento non esiste nel DT principale, viene aggiunta dopo DTO. Per esempio:

main.dts overlay.dts Risultato unito
[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";
  };
};

Nodi figlio

Esempi di sintassi del nodo figlio:

main.dts overlay.dts Risultato unito
[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";
    };
  };
};