Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

Compilación y verificación

Puede utilizar el Compilador de árbol de dispositivos (DTC) para compilar los archivos de origen del árbol de dispositivos. Sin embargo, antes de aplicar el DT de superposición en el DT principal de destino, también debe verificar el resultado simulando el comportamiento de DTO.

Compilación con DTC

Cuando se utiliza dtc para compilar .dts , debe agregar la opción -@ añadir un __symbols__ nodo en el que resulta .dtbo . El __symbols__ nodo contiene una lista de todos los nodos que están marcados con una etiqueta, que la biblioteca DTO puede utilizar para las referencias.

De comandos de ejemplo para construir principales DT .dts :

dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts

De comandos de ejemplo para construir la superposición DT .dts :

dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts

Verifique los resultados de DTO en el host

La verificación puede ayudarlo a identificar errores que pueden ocurrir al colocar el DT superpuesto en el DT principal. Antes de actualizar el destino, puede verificar el resultado de la superposición de DT en el host mediante la simulación del comportamiento de DTO utilizando /include/ en .dts .

Figura 1. Uso sintaxis /include/ para simular DTO en el host
  1. Crear una copia de la superposición .dts . En la copia, elimine el encabezado de la primera línea. Ejemplo:
    /dts-v1/;
    /plugin/;
    
    Guardar el archivo como my_overlay_dt_wo_header.dts (o cualquier nombre de archivo que desea).
  2. Crear una copia de los principales .dts . En la copia, después de la última línea, anexar la incluyen sintaxis para el archivo que creó en el paso 1. Por ejemplo:
    /include/ "my_overlay_dt_wo_header.dts"
    
    Guardar el archivo como my_main_dt_with_include.dts (o cualquier nombre de archivo que desea).
  3. Utilizar dtc para compilar my_main_dt_with_include.dts para conseguir el fusionaron DT, que debe ser el mismo resultado que DTO. Por ejemplo:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. Utilizar dtc para volcar my_merged_dt.dto .
    dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
    

Verificación de DTO en Android 9

Android 9 requiere una partición de superposición de blobs de árbol de dispositivos (DTBO). Para agregar nodos o realizar cambios en las propiedades en el SoC DT, el cargador de arranque debe superponer dinámicamente un DT específico del dispositivo sobre el SoC DT.

Indicando superposiciones aplicadas

Para permitir que el proveedor del conjunto de pruebas (VTS) para evaluar la exactitud de la aplicación de superposición, los proveedores deben añadir una nueva línea de comandos del kernel parámetro androidboot.dtbo_idx que indica las superposiciones seleccionados de la partición DTBO. En Android 12 con la versión de kernel 5.10 o superior, este parámetro pasa a través de bootconfig. Por ejemplo, el parámetro androidboot. dtbo_idx=x,y,z informes x , y y z como los índices de base cero de la Device superposiciones árbol (DTO) de la partición DTBO aplicado (en ese orden) por el gestor de arranque para el dispositivo de la base del árbol (DT).

Las superposiciones se puede aplicar a los nodos del árbol principal del dispositivo o añadir nuevos nodos, pero no puede hacer referencia a un nodo añadido en una capa anterior. Esta restricción es necesaria porque la aplicación de superposición no fusiona la tabla de símbolos de superposición con la tabla de símbolos DT principal (no fusionar evita conflictos en los nombres de los símbolos y complicación de las dependencias entre superposiciones).

Ejemplo: superposiciones no válidas

En este ejemplo, overlay_2.dts refiere a nodo e , que se añadió por overlay_1.dts . Después de overlay_1 se aplica a la principal DT, si se hace un intento de aplicar overlay_2 a la DT resultante, la aplicación de superposición fallará con un error de que el símbolo e no está presente en la tabla de símbolos para la base de DT.

main.dts overlay_1.dts overlay_2.dts
[main.dts]

/dts-v1/;

/ {
  a: a {};
  b: b {};
  c: c {};
};
[overlay_1.dts]

/dts-v1/;
/plugin/;

&b { ref1 =  <&a>;
    e: e {
        prop = <0x0a>;
        phandle = <0x04>;
    };
};
[overlay_2.dts]

/dts-v1/;
/plugin/;

/* invalid! */
&e {
    prop = <0x0b>;
};

Ejemplo: superposiciones válidas

En este ejemplo, overlay_2.dts se refiere únicamente al nodo b de los principales DTS. Cuando overlay_1 se aplica a la base de DT, a continuación, seguido por la aplicación de overlay_2 , el valor de la propiedad prop en el nodo e (set por overlay_1.dts ) se sobrescribe con el valor establecido por overlay_2.dts .

main.dts overlay_1.dts overlay_2.dts
[final.dts]

/dts-v1/;

/ {
  a: a {};
  b: b {};
  c: c {};
};
[overlay_1.dts]

/dts-v1/;
/plugin/;


&b { ref1 =  <&a>;
     e {
          prop = <0x0c>;
      };
};
[overlay_2.dts]

/dts-v1/;
/plugin/;

/* valid */
&b { ref1 =  <&c>;
     e {
          prop = <0x0d>;
      };
};

Implementando la partición DTBO

Para implementar la partición DTBO requerida, asegúrese de que el cargador de arranque pueda hacer lo siguiente:

  1. Identifique la placa en la que se está ejecutando y seleccione las superposiciones correspondientes que se aplicarán.
  2. Anexar el androidboot.dtbo_idx parámetro en la línea de comandos del kernel.
    • El parámetro debe indicar los índices de base cero de los DTO de la imagen de la partición DTBO que aplicó al DT base (en el mismo orden).
    • Los índices deben referirse a la posición de la superposición en la partición DTBO.

Para más detalles sobre la estructura de la partición DTBO, consulte Dispositivos de superposiciones de árbol en source.android.com.

Validando la partición DTBO

Puede utilizar VTS para verificar lo siguiente:

  • Existencia de comando kernel parámetro de línea de androidboot.dtbo_idx (comprobando que Init se configure automáticamente la correspondiente ro.boot.dtbo_idx propiedad del sistema).
  • Validez de la ro.boot.dtbo_idx propiedad del sistema (mediante la comprobación de que está previsto por la propiedad al menos un índice de imágenes DTBO válida).
  • Validez de la partición DTBO (también verifica las superposiciones en la partición DTBO que se aplican al DT base).
  • Los nodos adicionales o los cambios de propiedad en el DT resultante se presentan al kernel de Linux.

Por ejemplo, en las siguientes superposiciones y DT final, la adición de androidboot.dtbo_idx=5,3 a la línea de comandos del kernel pasa la validación, pero añadiendo androidboot.dtbo_idx=3,5 a la línea de comandos del núcleo no pasa la validación.

Superposición DT en el índice 3 Superposición DT en el índice 5
[overlay_1.dts]

/dts-v1/;
/plugin/;

&c { prop = <0xfe>; };
[overlay_2.dts]

/dts-v1/;
/plugin/;

&c { prop = <0xff>; };
DT final
/dts-v1/;
/ {

	a {
		phandle = <0x1>;
	};

	b {
		phandle = <0x2>;
	};

	c {
		phandle = <0x3>;
		prop = <0xfe>;
	};

	__symbols__ {
		a = "/a";
		b = "/b";
		c = "/c";
	};
};