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