La implementación de superposiciones del árbol de dispositivos (DTO) implica dividir, compilar, particionar y ejecutar el árbol de dispositivos (DT). 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 del DT.
Divide el DT
Comienza por dividir el DT en dos partes:
- DT principal La parte solo del SoC y las configuraciones predeterminadas, proporcionadas por el proveedor del SoC
- DT de superposición. Son las configuraciones específicas del dispositivo que proporcionan el ODM o el OEM.
Después de dividir los DT, debes asegurarte de que el DT principal y el DT de superposición sean compatibles para que la combinación de ambos genere un DT completo para el dispositivo. Para obtener detalles sobre el formato y las reglas de los DTO, consulta Sintaxis de DTO. Para obtener detalles sobre varios DT, consulta Usa varios DT.
Compila los DT principales y de superposición
Para compilar el DT principal, haz lo siguiente:
- Compila el DT principal
.dts
en un archivo.dtb
. - Graba el archivo
.dtb
en una partición accesible en el tiempo de ejecución del cargador de arranque (se detalla en [DT de partición](#partition)).
Para compilar el DT de superposición, haz lo siguiente:
- Compila el DT de superposición
.dts
en un archivo.dtbo
. Si bien este formato de archivo es el mismo que el del archivo.dtb
formateado como un DT aplanado, la extensión de archivo diferente lo distingue del DT principal. - Graba el archivo
.dtbo
en una partición accesible en el tiempo de ejecución del cargador de arranque (se detalla en [DT de partición](#partition)).
Para obtener detalles sobre la compilación con DTC y la verificación de los resultados de DTO en el host, consulta Compilación y verificación.
DT de partición
Determina una ubicación confiable y accesible en tiempo de ejecución para el bootloader en la memoria flash para colocar .dtb
y .dtbo
.
Ubicaciones de ejemplo para el DT principal:
- Parte de la partición de inicio, agregada al kernel (
image.gz
) - Blobs de DT separados (
.dtb
) en una partición dedicada (dtb
)
Ejemplos de ubicaciones para el DT de superposición:
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 el archivo .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 crecer en el futuro si es necesario.
En el caso de los dispositivos que admiten actualizaciones optimizadas (A/B), realiza una prueba A/B de las particiones principales de DT y de DT superpuesta:
Figura 3: Partición A/B de DTBO, ejemplo 1.
Figura 4: Partición A/B de DTBO, ejemplo 2.
Ejecutar en el bootloader
Para ejecutarlo, haz lo siguiente:
Figura 5: Implementación típica del tiempo de ejecución para el DTO en el bootloader.
- Carga
.dtb
del almacenamiento a la memoria. - Carga
.dtbo
del almacenamiento a la memoria. - Superpone
.dtb
con.dtbo
para que sea un DT combinado. - Inicia el kernel con la dirección de memoria del DT combinado.
Cómo mantener la compatibilidad
El DTB principal (del proveedor del SoC) se considera una superficie de API para los DTBO. Después de separar el DT en una parte común para el SoC y una parte específica para el dispositivo, debes mantener la compatibilidad mutua de las dos partes en el futuro, lo que incluye lo siguiente:
- Definición de DT en el DT principal. Por ejemplo, nodos, propiedades y etiquetas. Cualquier cambio en la definición del 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 "alias" que se asigne al nombre del nodo original (para evitar el cambio del DT de superposición).
- Superponer la ubicación de la tienda de DT. Por ejemplo, el nombre de la partición y el formato de almacenamiento.
Garantiza la seguridad
El bootloader debe garantizar que el DTB o el DTBO sean seguros, no estén modificados y no estén dañados. Puedes usar cualquier solución para proteger el DTB o el DTBO, por ejemplo, la firma de la imagen de inicio en vboot 1.0 o el pie de página HASH de AVB (vboot 2.0).
- Si DTB o DTBO se encuentran en una partición única, puedes agregar esa partición a la cadena de confianza de AVB. La cadena de confianza comienza con una raíz de confianza protegida por hardware y llega al bootloader, que verifica la integridad y la autenticidad de la partición DTB o DTBO.
- Si el DTB o el 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 DTBO podría compartir una clave pública con la particiónodm
).
Para obtener más información, consulta Inicio verificado.