Implementación de DTO

La implementación de DTO implica dividir el árbol de dispositivos, construir, particionar y ejecutar. Una vez que tenga una implementación funcional, también debe mantener la compatibilidad entre los dos DT y determinar una estrategia para garantizar la seguridad de cada partición de DT.

Dividiendo el DT

Comience dividiendo el árbol de dispositivos en dos (2) partes:

  • DT principal . La parte solo de SoC y las configuraciones predeterminadas, proporcionadas por el proveedor de SoC.
  • DT de superposición . Las configuraciones específicas del dispositivo, proporcionadas por ODM/OEM.

Después de dividir los árboles de dispositivos, debe garantizar la compatibilidad entre el IME principal y el IME superpuesto para que la fusión del IME principal y el IME superpuesto resulte en un IME completo para el dispositivo. Para obtener detalles sobre el formato y las reglas de DTO, consulte Sintaxis de DTO . Para obtener detalles sobre varios árboles de dispositivos, consulte Múltiples DT .

Creación de IME principales y superpuestos

Para construir el DT principal:

  1. Compile el DT principal .dts en un archivo .dtb .
  2. Flashee el archivo .dtb en una partición accesible en tiempo de ejecución del cargador de arranque (detallado a continuación).

Para construir el IME superpuesto:

  1. Compile superposición DT .dts en un archivo .dtbo . Si bien este formato de archivo es el mismo que el archivo .dtb formateado como un árbol de dispositivos plano, la extensión de archivo diferente lo distingue del DT principal.
  2. Flashee el archivo .dtbo en una partición accesible en tiempo de ejecución del cargador de arranque (como se detalla a continuación).

Para obtener detalles sobre la compilación con DTC y la verificación de los resultados de DTO en el host, consulte Compilación y verificación .

IME de partición

Determine una ubicación confiable y accesible en tiempo de ejecución del cargador de arranque en la memoria flash para colocar .dtb y .dtbo .

Ubicaciones de ejemplo para el DT principal:

  • Parte de la partición de arranque, adjunta al núcleo ( image.gz ).
  • Separe los blobs DT ( .dtb ) en una partición dedicada ( dtb ).

Ubicaciones de ejemplo para el IME superpuesto:

Partición única
Figura 1. Coloque .dtbo en una partición única, por ejemplo, partición dtbo .
Partición ODM
Figura 2. Coloque .dtbo en la partición odm (haga esto solo si su cargador de arranque tiene la capacidad de cargar datos del sistema de archivos de la partición odm ).

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 es más que suficiente y deja espacio para crecer en el futuro si es necesario.

Para dispositivos que admiten actualizaciones continuas (A/B) , A/B el DT principal y las particiones de DT superpuestas:

Ejemplo 1
Figura 3. Partición DTBO A/B, ejemplo 1.
Ejemplo 2
Figura 4. Partición DTBO A/B, ejemplo 2.

Corriendo en el gestor de arranque

Correr:

Figura 5. Implementación típica del tiempo de ejecución para la superposición del árbol de dispositivos en el cargador de arranque.
  1. Cargue .dtb desde el almacenamiento a la memoria.
  2. Cargue .dtbo desde el almacenamiento a la memoria.
  3. .dtb con .dtbo para que sea un DT fusionado.
  4. Inicie el kernel dada la dirección de memoria del DT fusionado.

Mantener la compatibilidad

El DTB principal (del proveedor de SoC) se trata como una superficie API para los DTBO. Después de separar el árbol de dispositivos en una parte común de SoC y una parte específica del dispositivo, debe mantener las dos partes compatibles entre sí en el futuro, lo que incluye:

  • Definición de IME en el IME principal (por ejemplo, nodos, propiedades, etiquetas) . Cualquier cambio de definición en el DT principal podría desencadenar cambios en el DT superpuesto. Por ejemplo, para corregir el nombre de un nodo en el IME principal, defina una etiqueta de "alias" que se asigne al nombre del nodo original (para evitar el cambio del IME superpuesto).
  • Superposición de ubicación de almacenamiento de DT (p. ej., nombre de partición, formato de almacenamiento) .

Garantizar la seguridad

El cargador de arranque debe garantizar que el DTB/DTBO sea seguro, no se modifique ni se corrompa. Puede usar cualquier solución para proteger DTB/DTBO, por ejemplo, la firma de la imagen de arranque en VBoot 1.0 o el pie de página AVB HASH (VBoot 2.0).

  • Si DTB/DTBO está en una partición única, puede 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 cargador de arranque, que verifica la integridad y autenticidad de la partición DTB/DTBO.
  • Si DTB/DTBO está 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ón odm ).

Para obtener más información, consulte Arranque verificado .