1 votos

Lpmake error "La partición debe tener solo extensiones lineales:"

Estoy tratando de extraer el contenido de super.img, modificar algunos elementos y luego volver a empaquetarlo. Seguí todos los pasos correctamente para extraer el contenido del archivo super.img.

Cuando ejecuto stat '%n %s *.img para todas las imágenes, obtengo los siguientes tamaños:

super.img 9663676416

Para las particiones dentro de super.img, obtengo lo siguiente:

mi_ext_a.img 4096
mi_ext_b.img 0
odm_a.img 755478528
odm_b.img 0
product_a.img 2827481088
product_b.img 0
system_a.img 644575232
system_b.img 0
system_dlkm_a.img 98304
system_dlkm_b.img 0
system_ext_a.img 503472128
system_ext_b.img 0
vendor_a.img 1484333056
vendor_b.img 0
vendor_dlkm_a.img 37294080
vendor_dlkm_b.img 0

Noté que la suma de las particiones es 6252732416 que es menor que el tamaño de super.img (no sé si este es el problema)

Ahora, incluso sin modificar el contenido de ninguna partición, quería usar lpmake para volver a crear el super.img de nuevo, por lo tanto, creé este lote

lpmake \
 --metadata-size 4096 \
 --super-name super \
 --metadata-slots 2 \
 --device super:9663676416 \
 --group main:6252736512 \
 --partition system_a:readonly:644575232:main --image system_a=./system_a.img  \
 --partition system_b:readonly:0:main --image system_b=./system_b.img \
 --partition system_ext_a:readonly:503472128:main --image system_ext_a=./system_ext_a.img  \
 --partition system_ext_b:readonly:0:main --image system_ext_b=./system_ext_b.img \
 --partition system_dlkm_a:readonly:98304:main --image system_dlkm_a=./system_dlkm_a.img \
 --partition system_dlkm_b:readonly:0:main --image system_dlkm_b=./system_dlkm_b.img \
 --partition product_a:readonly:2827481088:main --image product_a=./product_a.img  \
 --partition product_b:readonly:0:main --image product_b=./product_b.img \
 --partition vendor_a:readonly:1484333056:main --image vendor_a=./vendor_a.img \
 --partition vendor_b:readonly:0:main --image vendor_b=./vendor_b.img \
 --partition vendor_dlkm_a:readonly:37294080:main --image vendor_dlkm_a=./vendor_dlkm_a.img \
 --partition vendor_dlkm_b:readonly:0:main --image vendor_dlkm_b=./vendor_dlkm_b.img \
 --partition mi_ext_a:readonly:4096:main --image mi_ext_a=./mi_ext_a.img \
 --partition mi_ext_b:readonly:0:main --image mi_ext_b=./mi_ext_b.img \
 --partition odm_a:readonly:755478528:main --image odm_a=./odm_a.img \
 --partition odm_b:readonly:0:main --image odm_b=./odm_b.img \
 --sparse \
 --output ./super.new.img

Sin embargo, estoy obteniendo el siguiente error:

lpmake I 02-07 20:36:57 3610213 3610213 builder.cpp:1012] [liblp]Partition system_a se redimensionará de 0 bytes a 644575232 bytes
lpmake I 02-07 20:36:57 3610213 3610213 builder.cpp:1012] [liblp]Partition system_ext_a se redimensionará de 0 bytes a 503472128 bytes
lpmake I 02-07 20:36:57 3610213 3610213 builder.cpp:1012] [liblp]Partition system_dlkm_a se redimensionará de 0 bytes a 98304 bytes
lpmake I 02-07 20:36:57 3610213 3610213 builder.cpp:1012] [liblp]Partition product_a se redimensionará de 0 bytes a 2827481088 bytes
lpmake I 02-07 20:36:57 3610213 3610213 builder.cpp:1012] [liblp]Partition vendor_a se redimensionará de 0 bytes a 1484333056 bytes
lpmake I 02-07 20:36:57 3610213 3610213 builder.cpp:1012] [liblp]Partition vendor_dlkm_a se redimensionará de 0 bytes a 37294080 bytes
lpmake I 02-07 20:36:57 3610213 3610213 builder.cpp:1012] [liblp]Partition mi_ext_a se redimensionará de 0 bytes a 4096 bytes
lpmake I 02-07 20:36:57 3610213 3610213 builder.cpp:1012] [liblp]Partition odm_a se redimensionará de 0 bytes a 755478528 bytes
Formato de archivo disperso no válido en la magia de encabezado
Formato de archivo disperso no válido en el encabezado
Formato de archivo disperso no válido en la magia de encabezado
Formato de archivo disperso no válido en el encabezado
Formato de archivo disperso no válido en la magia de encabezado
Formato de archivo disperso no válido en el encabezado
Formato de archivo disperso no válido en la magia de encabezado
Formato de archivo disperso no válido en el encabezado
Formato de archivo disperso no válido en la magia de encabezado
Formato de archivo disperso no válido en el encabezado
Formato de archivo disperso no válido en la magia de encabezado
Formato de archivo disperso no válido en el encabezado
Formato de archivo disperso no válido en la magia de encabezado
Formato de archivo disperso no válido en el encabezado
Formato de archivo disperso no válido en la magia de encabezado
lpmake E 02-07 20:36:59 3610213 3610213 images.cpp:320][liblp]La partición solo debe tener extensiones lineales: odm_b

Independientemente de cambiar el orden anterior, sigue dando el mismo error para la última partición en el script.

¿Alguna idea de cómo configurarlo correctamente?

2voto

rumplestilzken Puntos 21

Esto significa que odm_b no puede estar al final de la declaración. Necesitas ordenar tus declaraciones de acuerdo a cómo se espera que sean tratadas las imágenes dentro de super.img. Se les refiere como extensiones.

imjtool debería ser capaz de darte información como esta, pero no pude hacer que funcionara correctamente.

Depura a través de https://github.com/rumplestilzken/lpunpack en algún lugar dentro al final de read_metadata y averigua cómo debería estar ordenado de acuerdo a LpMetadataPartition.num_extents y ordénalo en consecuencia.

Además, el super:[TAMAÑO] siempre debe ser mayor que la suma total de sus partes, idealmente deberías establecer esto como el tamaño máximo de la partición súper de los dispositivos.

Tuve un problema similar a este y moviendo la declaración problemática a la parte superior de la lista (ya que tenía 0 para num_extents) pude crear la super.img necesaria. No tengo el dispositivo al que pertenece la super.img y estoy confiando en probadores externos para probarlo en el futuro, pero pude crear la super.img.

Esto debería guiarte por el camino correcto para llegar a donde necesitas estar.

EDITAR: El tamaño de tu metadatos parece un poco bajo, el dispositivo con el que estoy trabajando tiene 65536

1voto

Estoy usando lpmake construido a partir de este repositorio: https://github.com/LonelyFool/lpunpack_and_lpmake

Tal vez sea un error de código fuente. Imprimo alguna traza de registro, y hay un desbordamiento de vector:

AñadirImagenDePartición vendor_b ./vendor_b.img tamaño:7 índice:7 tipo:0

Puedes simplemente comentar la comprobación y lpmake funcionará bien.

// if (extent.target_type != LP_TARGET_TYPE_LINEAR) {
//     LERROR << "La partición debería tener sólo extensiones lineales: " << ObtenerNombreDePartición(partición);
//     return false;
// }

0voto

zinger Puntos 111

Revisé el registro de compilación y encontré que la parte de construir el archivo super_empty.img incluye el comando completo de lpmake, pero con tamaños 0 para todas las imágenes. Cambié el tamaño de las imágenes de todos los a slot para que se ajusten a los nuevos tamaños de las imágenes creadas, y el código a continuación funcionó a la perfección. También noté que el orden de las particiones hace la diferencia.

lpmake \
 --metadata-size 65536\
 --super-name super --metadata-slots 3 --virtual-ab \
 --device super:9663676416\
 --group xiaomi_dynamic_partitions_a:9659482112 \
 --group xiaomi_dynamic_partitions_b:9659482112 \
 --partition odm_a:readonly:1327194112:xiaomi_dynamic_partitions_a \
 --partition odm_b:readonly:0:xiaomi_dynamic_partitions_b \
 --partition product_a:readonly:1524256768:xiaomi_dynamic_partitions_a \
 --partition product_b:readonly:0:xiaomi_dynamic_partitions_b \
 --partition system_a:readonly:965316608:xiaomi_dynamic_partitions_a \
 --partition system_b:readonly:0:xiaomi_dynamic_partitions_b \
 --partition system_dlkm_a:readonly:348160:xiaomi_dynamic_partitions_a \
 --partition system_dlkm_b:readonly:0:xiaomi_dynamic_partitions_b \
 --partition system_ext_a:readonly:457531392:xiaomi_dynamic_partitions_a \
 --partition system_ext_b:readonly:0:xiaomi_dynamic_partitions_b \
 --partition vendor_a:readonly:1512812544:xiaomi_dynamic_partitions_a \
 --partition vendor_b:readonly:0:xiaomi_dynamic_partitions_b \
 --partition vendor_dlkm_a:readonly:13971456:xiaomi_dynamic_partitions_a \
 --partition vendor_dlkm_b:readonly:0:xiaomi_dynamic_partitions_b \
 --sparse --output ./super_new.img

Realmente no importa el tamaño de --device super: en la tercera línea del código siempre y cuando sea mayor que el total de imágenes que encontré que es 5801431040.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X