Google is committed to advancing racial equity for Black communities. See how.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

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 use dtc para compilar .dts , debe agregar la opción -@ para agregar un nodo __symbols__ en el .dtbo resultante. El nodo __symbols__ contiene una lista de todos los nodos que están marcados con una etiqueta, que la biblioteca DTO puede usar como referencias.

Comando de muestra para construir DT .dts principal:

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

Comando de muestra para construir el DT .dts superpuesto:

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 superponer DT en el host simulando el comportamiento de DTO usando /include/ en .dts .

Figura 1. Utilice la sintaxis /include/ para simular DTO en el host
  1. Cree una copia del .dts superpuesto. En la copia, elimine el encabezado de la primera línea. Ejemplo:
    /dts-v1/;
    /plugin/;
    
    Guarde el archivo como my_overlay_dt_wo_header.dts (o cualquier nombre de archivo que desee).
  2. Cree una copia del .dts principal. En la copia, después de la última línea, agregue la sintaxis de inclusión del archivo que creó en el paso 1. Por ejemplo:
    /include/ "my_overlay_dt_wo_header.dts"
    
    Guarde el archivo como my_main_dt_with_include.dts (o cualquier nombre de archivo que desee).
  3. Use dtc para compilar my_main_dt_with_include.dts para obtener el DT combinado, que debería ser el mismo resultado que DTO. Por ejemplo:
    dtc -@ -O dtb -o my_merged_dt.dtb my_main_dt_with_include.dts
    
  4. Utilice 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 Vendor Test Suite (VTS) evalúe la corrección de la aplicación de superposición, los proveedores deben agregar un nuevo parámetro de línea de comando del kernel androidboot.dtbo_idx que indique las superposiciones seleccionadas de la partición DTBO. Por ejemplo, el parámetro androidboot. dtbo_idx=x,y,z informa x , y y z como índices de base cero de las superposiciones del árbol de dispositivos (DTO) de la partición DTBO aplicada (en ese orden) por el cargador de arranque al árbol de dispositivos (DT) base.

Las superposiciones se pueden aplicar a los nodos del árbol de dispositivos principal o agregar nuevos nodos, pero no pueden hacer referencia a un nodo agregado en una superposición 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 al nodo e , que fue agregado por overlay_1.dts . Después de aplicar overlay_1 al DT principal, si se intenta aplicar overlay_2 al 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 el DT base.

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 refiere solo al nodo b del DTS principal. Cuando se aplica overlay_1 al DT base, seguido de la aplicación de overlay_2 , el valor de la propiedad prop en el nodo e (establecido 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. androidboot.dtbo_idx parámetro androidboot.dtbo_idx a 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 obtener detalles sobre la estructura de la partición DTBO, consulte Superposiciones del árbol de dispositivos en source.android.com.

Validando la partición DTBO

Puede utilizar VTS para verificar lo siguiente:

  • Existencia del parámetro de línea de comando del kernel androidboot.dtbo_idx (comprobando que Init haya configurado automáticamente la propiedad del sistema ro.boot.dtbo_idx correspondiente).
  • Validez de la propiedad del sistema ro.boot.dtbo_idx (comprobando que la propiedad especifica al menos un índice de imagen DTBO válido).
  • 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, agregar androidboot.dtbo_idx=5,3 a la línea de comando del kernel pasa la validación, pero agregar androidboot.dtbo_idx=3,5 a la línea de comando del kernel 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";
	};
};