Puedes usar el compilador de árbol de dispositivos (DTC) para compilar la fuente del árbol de dispositivos (DTS). archivos. Sin embargo, antes de aplicar el árbol de dispositivos de superposición (DT) en el DT principal de destino, también deben verificar el resultado simulando el comportamiento de la superposición del árbol de dispositivos (DTO).
Cómo compilar con DTC
Cuando uses dtc
para compilar .dts
, deberás agregar
la opción -@
para agregar un nodo __symbols__
en el
.dtbo
resultante. El nodo __symbols__
contiene un
lista de todos los nodos que están marcados con una etiqueta, que la biblioteca DTO puede usar
para obtener referencias.
Comando de muestra para compilar la DT principal .dts
:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Comando de muestra para compilar la DT de superposición .dts
:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Cómo verificar los resultados de la DTO en el host
La verificación puede ayudarte a identificar errores que podrían ocurrir al colocar
la DT superpuesta en la DT principal. Antes de actualizar el destino, puedes verificar el
resultado de la superposición de la DT en el host simulando el comportamiento de DTO con
/include/
en .dts
.
Figura 1: Usa la sintaxis /include/ para simular la DTO en el host.
- Crea una copia de la superposición
.dts
. En la copia, quita el encabezado de primera línea. Ejemplo:/dts-v1/; /plugin/;
Guarda el archivo comomy_overlay_dt_wo_header.dts
(o cualquier nombre de archivo que desees). - Crea una copia del
.dts
principal. En la copia, después del última línea, agrega la sintaxis de inclusión para el archivo que creaste en el paso 1. Por ejemplo:/include/ "my_overlay_dt_wo_header.dts"
Guarda el archivo comomy_main_dt_with_include.dts
(o cualquier nombre de archivo que desees). - Usa
dtc
para compilarmy_main_dt_with_include.dts
para obtener la DT combinada, que debería será el mismo resultado que DTO. Por ejemplo:dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
- Usa
dtc
para volcarmy_merged_dt.dto
.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Cómo verificar la DTO en Android 9
Android 9 requiere una superposición de BLOB del árbol de dispositivos (DTBO). Para agregar nodos o realizar cambios en las propiedades del SoC DT, el bootloader debe superponer dinámicamente un DT específico del dispositivo sobre el SoC DT.
Cómo indicar las superposiciones aplicadas
Para habilitar el
Conjunto de pruebas de proveedores (VTS) para evaluar la precisión de la superposición
los proveedores deben agregar un nuevo parámetro de línea de comandos del kernel
androidboot.dtbo_idx
, que indica las superposiciones seleccionadas
la partición de DTBO. En Android 12 con la versión de kernel
5.10 o superior, este parámetro pasa a través de bootconfig.
Por ejemplo, el parámetro androidboot.dtbo_idx=x,y,z
informa
x
, y
y z
como índices basados en cero de
las DTO de la partición de DTBO aplicada (en ese orden)
que realiza el bootloader a la DT base.
Las superposiciones se pueden aplicar a los nodos del DT principal o agregar nodos nuevos, pero no puede hacer referencia a un nodo agregado en una superposición anterior. Esta es necesaria porque la app superpuesta no combina la tabla de símbolos de superposición con la tabla de símbolos de la DT principal (sin combinaciones evasivas) conflictos en nombres de símbolos y complicaciones de dependencias entre superposiciones).
Ejemplo: Superposiciones no válidas
En este ejemplo, overlay_2.dts
hace referencia a nodos
e
, agregado por
overlay_1.dts
Después de aplicar overlay_1
al
DT principal, si se intenta aplicar overlay_2
a la
DT resultante, la aplicación superpuesta falla y muestra un error que indica que el símbolo
e
no está presente en la tabla de símbolos de la
DT de base
main.dts | superposición_1.dts | superposición_2.dts |
---|---|---|
[main.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; |
[overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e: e { prop = <0x0a>; phandle = <0x04>; }; }; |
[overlay_2.dts] /dts-v1/; /plugin/; /* invalid! */ &e { prop = <0x0b>; }; |
Ejemplo: Superposiciones válidas
En este ejemplo, overlay_2.dts
se refiere solo al nodo
b
del DTS principal. Cuándo
overlay_1
se aplica al DT base y, luego, sigue el
app de overlay_2
, el valor de la propiedad
prop
en el nodo e
(configurada por overlay_1.dts
) se reemplaza por el valor establecido por
overlay_2.dts
main.dts | superposición_1.dts | superposición_2.dts |
---|---|---|
[final.dts] /dts-v1/; / { a: a {}; b: b {}; c: c {}; }; |
[overlay_1.dts] /dts-v1/; /plugin/; &b { ref1 = <&a>; e { prop = <0x0c>; }; }; |
[overlay_2.dts] /dts-v1/; /plugin/; /* valid */ &b { ref1 = <&c>; e { prop = <0x0d>; }; }; |
Implementa la partición de DTBO
Para implementar la partición de DTBO requerida, asegúrate de que el bootloader pueda hacer lo siguiente: lo siguiente:
- Identifica la placa en la que se está ejecutando y selecciona la que corresponda superposiciones que se deben aplicar.
- Agrega el parámetro
androidboot.dtbo_idx
al kernel la línea de comandos.- El parámetro debe indicar los índices basados en cero de las DTO de la imagen de partición de DTBO que aplicó al DT base (en el mismo por orden).
- Los índices deben hacer referencia a la posición de la superposición en el DTBO. por cada partición.
Para obtener detalles sobre la estructura de la partición de DTBO, consulta Superposiciones del árbol de dispositivos.
Valida la partición de DTBO
Puedes usar VTS para verificar lo siguiente:
- Existencia del parámetro de línea de comandos del kernel
androidboot.dtbo_idx
(comprobando queInit
tenga configurar automáticamente el sistema dero.boot.dtbo_idx
correspondiente propiedad). - La validez de la propiedad del sistema
ro.boot.dtbo_idx
(por comprobar que la propiedad especifique al menos una imagen de DTBO válida ). - Validez de la partición de DTBO (también verifica las superposiciones en el DTBO particiones que se aplican a la DT base).
- Se presentan los nodos adicionales o los cambios de propiedades en la DT resultante. al kernel de Linux.
Por ejemplo, en las siguientes superposiciones y DT final, agregar
androidboot.dtbo_idx=5,3
a la línea de comandos del kernel pasa
pero si agregas androidboot.dtbo_idx=3,5
al kernel
la línea de comandos no pasa la validación.
DT de superposición en el índice 3 | DT de superposición en el índice 5 |
---|---|
[overlay_1.dts] /dts-v1/; /plugin/; &c { prop = <0xfe>; }; |
[overlay_2.dts] /dts-v1/; /plugin/; &c { prop = <0xff>; }; |
DT final |
---|
/dts-v1/; / un { phandle = <0x1>; }. b { phandle = <0x2>; }. c { phandle = <0x3>; prop = <0xfe>; }. __símbolos__ { a = "/a"; b = "/b"; c = "/c"; }. }. |