El formato de fuente del árbol de dispositivos (DTS) es una representación textual de un árbol de dispositivos (DT). El compilador de árbol de dispositivos (DTC) procesa este formato en un DT binario, que es la forma que espera el kernel de Linux.
Usa referencias
El proyecto DTC (compilador de árbol de dispositivos + parches de superposición) describe el formato DTS en dtc-format.txt y manual.txt.
El formato y las reglas de los DTO se describen en dt-object-internal.txt.
En estos documentos, se describe cómo actualizar el DT principal con el nodo fragment@x
y la sintaxis __overlay__
en el DT de superposición. Por ejemplo:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Sin embargo, Google recomienda no usar fragment@x
ni la sintaxis __overlay__
, y, en su lugar, usar la sintaxis de referencia. Por ejemplo:
&some_node { some_prop = "okay"; ... };
dtc
compila la sintaxis de referencia en el mismo objeto que el anterior con la sintaxis __overlay__
. Esta sintaxis no te obliga a asignar un número a los fragmentos, lo que te permite leer y escribir DTS de superposición con facilidad. Si tu dtc
no admite esta sintaxis, usa dtc en AOSP.
Usa etiquetas
Para permitir referencias no definidas a nodos que no están presentes en el momento de la compilación, el archivo .dts
de DT de superposición debe tener una etiqueta /plugin/
en su encabezado. Por ejemplo:
/dts-v1/; /plugin/;
Desde aquí, puedes orientar los nodos que se superpondrán con una referencia, que es una ruta de acceso de nodo absoluta con un signo & como prefijo. Por ejemplo, para node@0
en el DT principal:
Define etiquetas en el 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 el DT principal, se anula después del DTO. De lo contrario, se adjunta. Por ejemplo:
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"; }; }; |
Adjuntar
Si la propiedad de destino de referencia no existe en el DT principal, se agrega después del DTO. Por ejemplo:
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"; }; }; |
Nodos secundarios
Ejemplos de sintaxis de nodos secundarios:
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"; }; }; }; |