Puede utilizar Device Tree Compiler (DTC) para compilar los archivos de origen del árbol de dispositivos. Sin embargo, antes de aplicar el IME superpuesto en el IME principal de destino, también debe verificar el resultado simulando el comportamiento de DTO.
Compilando con DTC
Al usar 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 referencia.
Comando de muestra para construir DT principal .dts
:
dtc -@ -O dtb -o my_main_dt.dtb my_main_dt.dts
Comando de muestra para construir la superposición DT .dts
:
dtc -@ -O dtb -o my_overlay_dt.dtbo my_overlay_dt.dts
Verificar los resultados de DTO en el host
La verificación puede ayudarlo a identificar los errores que pueden ocurrir al colocar el IME superpuesto en el IME 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
.
/include/
para simular DTO en el host- Cree una copia de la superposición
.dts
. En la copia, elimine el encabezado de la primera línea. Ejemplo:/dts-v1/; /plugin/;
Guarde el archivo comomy_overlay_dt_wo_header.dts
(o cualquier nombre de archivo que desee). - Cree una copia del
.dts
principal. En la copia, después de la última línea, agregue la sintaxis de inclusión para el archivo que creó en el paso 1. Por ejemplo:/include/ "my_overlay_dt_wo_header.dts"
Guarde el archivo comomy_main_dt_with_include.dts
(o cualquier nombre de archivo que desee). - Use
dtc
para compilarmy_main_dt_with_include.dts
para obtener el DT fusionado, 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
- Use
dtc
para volcarmy_merged_dt.dto
.dtc -O dts -o my_merged_dt.dts my_merged_dt.dtb
Verificando DTO en Android 9
Android 9 requiere una partición Device Tree Blob Overlay (DTBO). Para agregar nodos o realizar cambios en las propiedades del SoC DT, el gestor de arranque debe superponer dinámicamente un DT específico del dispositivo sobre el SoC DT.
Indicación de superposiciones aplicadas
Para permitir que Vendor Test Suite (VTS) evalúe la exactitud 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. En Android 12 con kernel versión 5.10 o superior, este parámetro pasa a través de bootconfig. Por ejemplo, el parámetro androidboot.dtbo_idx=x,y,z
informa x
, y
y z
como los í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 a la base Árbol de dispositivos (DT).
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 de DT principal (no fusionar evita conflictos en los nombres de los símbolos y la complicación de las dependencias entre superposiciones).
Ejemplo: superposiciones no válidas
En este ejemplo, overlay_2.dts
hace referencia 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 que indica que el símbolo e
no está presente en la tabla de símbolos para el DT base.
principal.dts | superposición_1.dts | superposición_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 solo al nodo b
del DTS principal. Cuando overlay_1
se aplica 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
.
principal.dts | superposición_1.dts | superposición_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 gestor de arranque pueda hacer lo siguiente:
- Identifique la placa en la que se está ejecutando y seleccione las superposiciones correspondientes que se aplicarán.
- Agregue el parámetro
androidboot.dtbo_idx
a la línea de comando del kernel.- El parámetro debe indicar los índices de base cero de los DTO de la imagen de partición DTBO que aplicó al DT base (en el mismo orden).
- Los índices deben hacer referencia 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.
Validación de la partición DTBO
Puede usar VTS para verificar lo siguiente:
- Existencia del parámetro de línea de comando del kernel
androidboot.dtbo_idx
(al verificar queInit
haya configurado automáticamente la propiedad del sistemaro.boot.dtbo_idx
correspondiente). - Validez de la propiedad del sistema
ro.boot.dtbo_idx
(comprobando que la propiedad especifique 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 propiedades 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 comandos del kernel pasa la validación, pero agregar androidboot.dtbo_idx=3,5
a la línea de comandos del kernel no pasa la validación.
IME de superposición en el índice 3 | IME de superposición 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"; }; }; |
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2022-06-06 (UTC)