3 votos

¿Cuál es el formato de system.img de Android M1 Initial Preview?

Descargo Android Emulator M1 Initial Preview desde https://github.com/google/Android-emulator-m1-preview/releases

Dentro del archivo .app encontré api30-gphone-arm64-v8a/system.img que no es un archivo yaffs2 ni sparse:

./unyaffs2 /tmp/android-wip/system.img /tmp/android-wip/system-img/
unyaffs2-0.2.8: image extracting tool for YAFFS2
image size (3232759808) is NOT a mutiple of 2048 + 64

operation incomplete
files contents may be broken

simg2img system.img.ext4 system.img
Invalid sparse file format at header magic
Failed to read sparse file

¿Cuál es el formato de dicho archivo?

Actualizaciones: Basado en la dirección de @Robert, puedo ver que el archivo es una imagen fdisk:

$ fdisk -lu system.img
Disk system.img: 3,1 GiB, 3232759808 bytes, 6313984 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 41F73643-DBCB-41A1-A27E-9FDB53578618

Device      Start     End Sectors Size Type
system.img1  2048    4095    2048   1M Linux filesystem
system.img2  4096 6311935 6307840   3G Linux filesystem

Ahora, no está claro el formato de la partición que hay dentro, porque montarla como una partición linux normal falla:

$ sudo mount -o loop,offset=1048576 system.img /mnt/android-1
mount: /mnt/android-1: wrong fs type, bad option, bad superblock on /dev/loop17, missing codepage or helper program, or other error.

gparted tampoco entiende la partición:

enter image description here

2 votos

El archivo no es una partición sino un disco entero. Puedes abrirlo con fdisk y ver que contiene múltiples particiones.

0 votos

@Robert Gracias. ¿Tienes más información sobre el tipo de formato de cada partición? ¿No parece que sean particiones ext4?

4voto

alecxs Puntos 29

desplazamiento incorrecto, la partición comienza en el sector 4096. puede utilizar kpartx en cambio

Android más reciente que ejecuta particiones dinámicas. la superpartición se puede descomprimir con Herramientas de partición dinámica

Además, las particiones están marcadas como de sólo lectura, por lo que mount -r se requiere la bandera

sudo -i

git clone https://github.com/AndroidDumps/Firmware_extractor.git
PATH=$PATH:$(realpath Firmware_extractor/tools/Linux/bin)

mkdir -p /mnt/android-1/system_root ../extracted
kpartx -av system.img
lpunpack -p system /dev/mapper/loop2p2 ../extracted

mount -t ext4 -o loop,ro,noexec,noload,noatime ../extracted/system.img /mnt/android-1/system_root
thunar /mnt/android-1/system_root

(o lo que sea kpartx le dice que la segunda partición está mapeada)


en caso de que necesite hacer que la partición lógica/ext4-dedup sea escribible, aumente primero la partición y luego duplique los bloques compartidos

cd ../extracted
dd if=/dev/zero bs=1G seek=1 count=0 of=system.img
resize2fs system.img 1G
e2fsck -E unshare_blocks system.img

debería ser capaz de mount -w después


Reembalaje requiere nuevos vbmeta firma con avbtool.py almacenado en la primera partición system.img1 empezar en el sector 2048 (que va demasiado lejos aquí)

superrepack herramienta multiplataforma de terceros para facilitar el desempaquetado/reempaquetado system.img2 se recomienda automatizar todo el proceso de reenvasado

sin embargo, puede hacerlo manualmente con lpmake (requiere que todas las particiones se descompriman en ../extracted ver paso anterior lpunpack )
fuente

resize2fs -M system.img
e2fsck -yf system.img
lpmake --metadata-size 65536 --super-name super --metadata-slots 1 --device super:3229614080 --group main:2369171456 --partition system:readonly:787050496:main --image system=system.img --partition vendor:readonly:83619840:main --image vendor=vendor.img --partition product:readonly:1366814720:main --image product=product.img --partition system_ext:readonly:131686400:main --image system=system_ext.img --sparse --output super.img

0 votos

Falló con este error: ``` mount -t ext4 -o loop,rw,noatime /dev/mapper/loop19p2 /mnt/Android-1/system mount: /mnt/Android-1/system: tipo de fs incorrecto, opción incorrecta, superbloque incorrecto en /dev/loop20, falta de codepage o programa de ayuda, u otro error. ```

0 votos

Gracias por la esclarecedora respuesta. He podido montar la imagen y cambiar el contenido dentro ahora

1 votos

No podrá ejecutar la partición modificada a menos que avb/dm-verity esté desactivado. tal vez ya sea suficiente con establecer el bandera 2 en system.img1 con un editor hexadecimal que le indicará que se salte la verificación del hashtree (nunca lo he probado, pero es lo que hace magisk) Android.stackexchange.com/q/221756

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