La implementación de superposiciones del árbol de dispositivos (DTO) implica dividir el árbol de dispositivos (DT), compilarlo, particionarlo y ejecutarlo. Después de tener una implementación en funcionamiento, también debes mantener la compatibilidad entre los dos DT y determinar una estrategia para garantizar la seguridad de cada partición de DT.
Divide el DT
Comienza por dividir el DT en dos partes:
- DT principal : Es la parte exclusiva del SoC y las configuraciones predeterminadas que proporciona el proveedor del SoC.
- DT superpuesto : Son las configuraciones específicas del dispositivo que proporcionan el ODM o el OEM.
Después de dividir los DT, debes garantizar la compatibilidad entre el DT principal y el DT superpuesto para que la combinación de ambos dé como resultado un DT completo para el dispositivo. Para obtener detalles sobre el formato y las reglas de DTO, consulta Sintaxis de DTO. Para obtener detalles sobre varios DT, consulta Usa varios DT.
Compila los DT principal y superpuesto
Para compilar el DT principal, haz lo siguiente:
- Compila el DT principal
.dtsen un archivo.dtb. - Flashea el archivo
.dtben una partición accesible para el tiempo de ejecución del bootloader (se detalla en [Particiona los DT](#partition)).
Para compilar el DT superpuesto, haz lo siguiente:
- Compila el DT superpuesto
.dtsen un archivo.dtbo. Si bien este formato de archivo es el mismo que el archivo.dtbcon formato de DT aplanado, la extensión de archivo diferente lo distingue del DT principal. - Flashea el archivo
.dtboen una partición accesible para el tiempo de ejecución del bootloader (se detalla en [Particiona los DT](#partition)).
Para obtener detalles sobre la compilación con DTC y la verificación de los resultados de DTO en el host, consulta Compila y verifica.
Particiona los DT
Determina una ubicación de confianza y accesible para el tiempo de ejecución del bootloader en la memoria flash para colocar .dtb y .dtbo.
Ubicaciones de ejemplo para el DT principal:
- Parte de la partición de arranque, agregada al kernel (
image.gz) - Blobs de DT separados (
.dtb) en la partición dedicada (dtb)
Ubicaciones de ejemplo para el DT superpuesto:

Figura 1: Coloca .dtbo en una partición odm (hazlo solo si tu bootloader tiene la capacidad de cargar datos desde el sistema de archivos de una partición odm).

Figura 2: Coloca .dtbo en una partición única, como una partición dtbo.
Nota: El tamaño de la partición de DT superpuesta depende del dispositivo y de la cantidad de cambios necesarios sobre el blob de DT principal. Por lo general, 8 MB son más que suficientes y permiten espacio para crecer en el futuro si es necesario.
Para los dispositivos que admiten actualizaciones fluidas (A/B), realiza A/B en las particiones de DT principal y DT superpuesto:

Figura 3: Partición DTBO A/B, ejemplo 1

Figura 4: Partición DTBO A/B, ejemplo 2
Ejecuta en el bootloader
Para ejecutar, haz lo siguiente:

Figura 5: Implementación típica del tiempo de ejecución para DTO en el bootloader
- Carga
.dtbdel almacenamiento a la memoria. - Carga
.dtbodel almacenamiento a la memoria. - Superpone
.dtbcon.dtbopara que sea un DT combinado. - Inicia el kernel con la dirección de memoria del DT combinado.
Mantén la compatibilidad
El DTB principal (del proveedor del SoC) se trata como una superficie de API para los DTBO. Después de separar el DT en una parte común del SoC y una parte específica del dispositivo, debes mantener las dos partes mutuamente compatibles en el futuro, lo que incluye lo siguiente:
- Definición de DT en el DT principal : Por ejemplo, nodos, propiedades, etiquetas. Cualquier cambio de definición en el DT principal podría activar cambios en el DT superpuesto. Por ejemplo, para corregir un nombre de nodo en el DT principal, define una etiqueta "alias" que se asigne al nombre del nodo original (para evitar el cambio del DT superpuesto).
- Ubicación de almacenamiento del DT superpuesto : Por ejemplo, nombre de la partición, formato de almacenamiento.
Garantiza la seguridad
El bootloader debe garantizar que el DTB o el DTBO sean seguros, no estén modificados ni dañados. Puedes usar cualquier solución para proteger el DTB o el DTBO, por ejemplo, la firma de imagen de arranque en VBoot 1.0 o el pie de página HASH de AVB (VBoot 2.0).
- Si el DTB o el DTBO están en una partición única, puedes agregar esa partición a la cadena de confianza de AVB. La cadena de confianza comienza desde una raíz de confianza protegida por hardware y va al bootloader, que verifica la integridad y la autenticidad de la partición DTB o DTBO.
- Si el DTB o el DTBO están en una partición existente (como la partición
odm), esa partición debe estar en la cadena de confianza de AVB. (La partición DTBO podría compartir una clave pública con la particiónodm).
Para obtener más información, consulta Inicio verificado.