Sintaxe de DTO

O formato de origem da árvore de dispositivos (DTS, na sigla em inglês) é uma representação textual de uma árvore de dispositivos (DT, na sigla em inglês). O compilador da árvore de dispositivos (DTC) processa esse formato em uma DT binária, que é a forma esperada pelo kernel do Linux.

Usar referências

O DTC (compilador de árvore do dispositivo + patches de sobreposição) descreve o formato DTS em dtc-format.txt (link em inglês) e manual.txt. O formato e as regras de DTO estão descritos em dt-object-internal.txt. Estes documentos descrevem como atualizar a DT principal usando nós fragment@x e sintaxe __overlay__ na DT de sobreposição. Por exemplo:

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

No entanto, o Google recomenda que você não use fragment@x e sintaxe __overlay__ e, em vez disso, use a função sintaxe de referência. Exemplo:

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

A sintaxe de referência é compilada pelo dtc no mesmo objeto que o acima usando a sintaxe __overlay__. Essa sintaxe não força você a numerar os fragmentos, facilitando a leitura e a gravação do DTS de sobreposição. Se as dtc não é compatível com essa sintaxe sintática. Use o DCC no AOSP.

Usar rótulos

Para permitir referências indefinidas a nós ausentes no momento da compilação, o O arquivo .dts da DT de sobreposição precisa ter uma tag /plugin/ cabeçalho. Exemplo:

/dts-v1/;
/plugin/;

A partir daqui, você pode segmentar os nós a serem sobrepostos usando uma referência, que é um caminho de nó absoluto prefixado com um "e" comercial (&). Por exemplo, para node@0 na DT principal:

Definir rótulos na DT principal ... ... e use os rótulos.
[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>;
};

Substituir

Se a propriedade de destino de referência existir na DT principal, ela será substituída. após DTO caso contrário, será anexado. Exemplo:

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

Anexar

Se a propriedade do destino de referência não existir na DT principal, ela será anexado após DTO. Exemplo:

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

Nós filhos

Exemplos de sintaxe do nó filho:

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