El formato Device Tree Source (DTS) es una representación textual de un árbol de dispositivos. El compilador de árbol de dispositivos (DTC) procesa este formato en un árbol de dispositivos binario, que es la forma esperada por el kernel de Linux.
Usando 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 DTO se describen en dt-object-internal.txt . Estos documentos describen cómo actualizar el DT principal utilizando el nodo fragment@x
y la sintaxis __overlay__
en el DT superpuesto. Por ejemplo:
/ { fragment@0 { target = <&some_node>; __overlay__ { some_prop = "okay"; ... }; }; };
Sin embargo, Google recomienda encarecidamente no utilizar fragment@x
y la sintaxis __overlay__
y, en su lugar, utilizar la sintaxis de referencia. Por ejemplo:
&some_node { some_prop = "okay"; ... };
dtc
compila la sintaxis de referencia en el mismo objeto que el anterior usando la sintaxis __overlay__
. Esta sintaxis no le obliga a numerar los fragmentos, lo que le permite leer y escribir DTS superpuestos fácilmente. Si su dtc
no admite este azúcar sintáctico, use el dtc en AOSP .
Usando etiquetas
Para permitir referencias indefinidas a nodos que no están presentes en el momento de la compilación, el archivo DT .dts
superpuesto debe tener una etiqueta /plugin/
en su encabezado. Por ejemplo:
/dts-v1/; /plugin/;
Desde aquí puede seleccionar los nodos que se superpondrán utilizando una referencia, que es una ruta de nodo absoluta con el prefijo comercial (&). Por ejemplo, para node@0
en el DT principal:
Definir etiquetas en el DT principal... | ... entonces 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>; }; |
Primordial
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:
principal.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"; }; }; |
Anexando
Si la propiedad de destino de referencia no existe en el DT principal, se agrega después de DTO. Por ejemplo:
principal.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 nodo secundario:
principal.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"; }; }; }; |