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"; }; }; }; |