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 que funcione, 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. La parte solo para SoC y las configuraciones predeterminadas que proporciona el proveedor de SoC
- DT superpuesto: Son las configuraciones específicas del dispositivo que proporciona el ODM/OEM.
Después de dividir los DT, debes asegurarte de que sean compatibles entre sí para que la combinación de los DT principales y de los DT superpuestos genere 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 Cómo usar varios DT.
Compila los DT principales y superpuestos
Para compilar el DT principal, haz lo siguiente:
- Compila el
.dts
de DT principal en un archivo.dtb
. - Escribe el archivo
.dtb
en una partición a la que el entorno de ejecución del bootloader pueda acceder (se detalla en [DT de partición](#partition)).
Para compilar el DT de superposición, haz lo siguiente:
- Compila la superposición DT
.dts
en un archivo.dtbo
. Si bien este formato de archivo es el mismo que el archivo.dtb
con formato de DT aplanado, la extensión de archivo diferente lo distingue del DT principal. - Escribe el archivo
.dtbo
en una partición a la que el entorno de ejecución del bootloader pueda acceder (se detalla en [DT de partición](#partition)).
Para obtener información sobre cómo compilar con DTC y verificar los resultados de DTO en el host, consulta Cómo compilar y verificar.
DT de partición
Determina una ubicación confiable y de acceso al tiempo de ejecución del bootloader en la memoria flash para colocar .dtb
y .dtbo
.
Ejemplos de ubicaciones para el DT principal:
- Parte de la partición de inicio, que se agrega al kernel (
image.gz
) - Blobs de DT separados (
.dtb
) en una partición dedicada (dtb
)
Ejemplos de ubicaciones para el DT superpuesto:
Figura 1: Coloca .dtbo en una partición odm (haz esto solo si el 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 en la parte superior del blob de DT principal. Por lo general, 8 MB son más que suficientes y permiten un margen para crecer en el futuro si es necesario.
En el caso de los dispositivos que admiten actualizaciones fluidas (A/B), se A/B las particiones de DT principal y de DT superpuestas:
Figura 3: Partición A/B de DTBO, ejemplo 1.
Figura 4: Prueba A/B de la partición de DTBO, ejemplo 2.
Ejecutar en el bootloader
Para ejecutarlo, haz lo siguiente:
Figura 5: Implementación típica del entorno de ejecución para DTO en el bootloader.
- Carga
.dtb
del almacenamiento en la memoria. - Carga
.dtbo
del almacenamiento en la memoria. - Superpone
.dtb
con.dtbo
para que sea un DT combinado. - Inicia el kernel con la dirección de memoria del DT fusionado.
Cómo mantener la compatibilidad
La DTB principal (del proveedor de SoC) se considera una plataforma 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 DT principal. Por ejemplo, nodos, propiedades y etiquetas. Cualquier cambio de definición en el DT principal podría activar cambios en el DT de superposición. Por ejemplo, para corregir el nombre de un nodo en el DT principal, define una etiqueta de “alias” que se asigne al nombre del nodo original (para evitar el cambio del DT de superposición).
- Superposición de la ubicación de la tienda de DT. Por ejemplo, el nombre de la partición, el formato de almacenamiento.
Garantiza la seguridad
El bootloader debe garantizar que el DTB o DTBO sea seguro, no esté modificado ni dañado. Puedes usar cualquier solución para proteger la DTB o la DTBO, por ejemplo, la firma de la imagen de inicio en VBoot 1.0 o el pie de página de HASH de AVB (VBoot 2.0).
- Si la DTB o la 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 en una raíz de confianza protegida por hardware y va al bootloader, que verifica la integridad y autenticidad de la partición DTB o DTBO.
- Si la DTB o la DTBO se encuentran 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 de DTBO podría compartir una clave pública con la particiónodm
).
Para obtener más información, consulta Inicio verificado.