Implementación de DTO

La implementación de DTO implica dividir el árbol de dispositivos, construirlo, particionarlo y ejecutarlo. 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 DT.

Dividiendo el DT

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

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

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

Creación de DT principales y superpuestos

Para construir el DT principal:

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

Para construir el DT de superposición:

  1. Compile la 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 aplanado, la extensión de archivo diferente lo distingue del DT principal.
  2. Actualice 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 cómo compilar con DTC y verificar los resultados de DTO en el host, consulte Compilación y verificación .

Partición de IME

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, agregada al kernel ( 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 sólo si su gestor de arranque tiene la capacidad de cargar datos desde el sistema de archivos de la partición odm ).

Nota: El tamaño de la partición DT superpuesta depende del dispositivo y de la cantidad de cambios necesarios en la parte superior del blob DT principal. Normalmente, 8 MB son más que suficientes y permiten crecer en el futuro si es necesario.

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

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

Ejecutando en el gestor de arranque

Correr:

Figura 5. Implementación típica en tiempo de ejecución para la superposición del árbol de dispositivos en el gestor de arranque.
  1. Cargue .dtb desde el almacenamiento a la memoria.
  2. Cargue .dtbo desde el almacenamiento a la memoria.
  3. Superponga .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, debes mantener las dos partes mutuamente compatibles en el futuro, incluyendo:

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

Garantizar la seguridad

El gestor de arranque debe garantizar que el DTB/DTBO sea seguro, no esté modificado y no esté dañado. Puede utilizar cualquier solución para proteger DTB/DTBO, por ejemplo, firma de imagen de arranque en VBoot 1.0 o 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 llega al gestor 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 .