Sintaxe DTO

O formato Device Tree Source (DTS) é uma representação textual de uma árvore de dispositivos. O Device Tree Compiler (DTC) processa esse formato em uma árvore binária de dispositivos, que é o formato esperado pelo kernel do Linux.

Usando referências

O projeto DTC (Device Tree compiler + overlay patches) descreve o formato DTS em dtc-format.txt e manual.txt . O formato e as regras do DTO são descritos em dt-object-internal.txt . Estes documentos descrevem como atualizar o DT principal usando o nó fragment@x e a sintaxe __overlay__ no DT de sobreposição. Por exemplo:

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

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

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

A sintaxe de referência é compilada por dtc no mesmo objeto acima usando a sintaxe __overlay__ . Essa sintaxe não força você a numerar os fragmentos, permitindo que você leia e grave facilmente DTS de sobreposição. Se o seu dtc não suportar esse açúcar sintático, use o dtc em AOSP .

Usando rótulos

Para permitir referências indefinidas a nós não presentes no momento da compilação, o arquivo DT .dts de sobreposição deve ter uma tag /plugin/ em seu cabeçalho. Por exemplo:

/dts-v1/;
/plugin/;

A partir daqui você pode direcionar 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 no DT principal:

Definir etiquetas no TAG principal ... ... então 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>;
};

Substituindo

Se a propriedade alvo de referência existir no DT principal, ela será substituída após o DTO; caso contrário, será anexado. Por exemplo:

principal.dts sobreposição.dts Resultado mesclado
[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";
 
};
};

Anexando

Se a propriedade alvo de referência não existir no DT principal, ela será anexada após o DTO. Por exemplo:

principal.dts sobreposição.dts Resultado mesclado
[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 de nó filho:

principal.dts sobreposição.dts Resultado mesclado
[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";
   
};
 
};
};