2 votos

¿Cómo hacer un archivo de imagen dispersa a partir del firmware original?

Accidentalmente borré /system partición y ahora tengo mi teléfono Gionee S10C bricked.

He descargado el firmware original, pero puedo ver una serie de archivos de imagen del sistema. (Este firmware es para ser utilizado por Qualcomm Flash Image Loader)

system_1.img, system_2.img, ..., system_53.img

Cuando intento instalar el firmware original usando QFIL poniendo el teléfono en modo EDL, obtengo sahara fail error . (El mismo error en aquí y he probado la mayoría de las soluciones que he encontrado, pero nada funciona)

Ahora, ¿hay alguna forma de utilizar las 53 imágenes de sistema anteriores para restaurar mi teléfono utilizando fastboot flash ¿comando?

Estoy seguro de que sólo system es necesario restaurar la partición para que mi teléfono vuelva a funcionar, porque no he modificado ninguna otra partición.

3voto

alecxs Puntos 29

concatenar archivos con dd seek=$offset de xml y luego sparse con img2simg

rawprogram0.xml contiene

- partition name:    filename="system.img"
- partition size:    num_partition_sectors="8388608"
- partition offset:  start_sector="1312768"

rawprogram_unsparse.xml contiene system_1.img - system_53.img

- file name:         filename="system_1.img"
- file size:         num_partition_sectors="262160"
- file offset:       start_sector="1312768"

Nota: no queremos el desplazamiento por lo que restaremos de start_sector

1312768 - 1312768 = 0

- file name:         filename="system_1.img"
- file size:         num_partition_sectors="262160"
- file offset:       start_sector="0"

1576968 - 1312768 = 264200

- file name:         filename="system_2.img"
- file size:         num_partition_sectors="16"
- file offset:       start_sector="264200"

1581024 - 1312768 = 268256

- file name:         filename="system_3.img"
- file size:         num_partition_sectors="256048"
- file offset:       start_sector="268256"

Ahora utiliza el dd seek parámetro para pegar los trastos en los desplazamientos adecuados
(sparse se llena de ceros)

bs=$SECTOR_SIZE_IN_BYTES
seek=$start_sector
count=$num_partition_sectors

dd if=system_1.img count=262160 seek=0       bs=512 of=system_ext4.img
dd if=system_2.img count=16     seek=264200  bs=512 of=system_ext4.img
dd if=system_3.img count=256048 seek=268256  bs=512 of=system_ext4.img
...
dd if=/dev/zero    count=0      seek=8388608 bs=512 of=system_ext4.img

el resultado es una imagen de partición ext4 montable

mkdir system
sudo mount -t ext4 -o loop system_ext4.img system
ls system

Por último, este archivo se puede separar con img2simg

sudo apt install -y f2fs-tools android-tools-fsutils android-sdk-platform-tools-common
img2simg system_ext4.img system.img

GNU bash script con sed

#/bin/bash

shopt -s extglob

bs=512
label=system
input=rawprogram0.xml
output=rawprogram_unsparse.xml

source <(sed -nr "s,.*\s(filename=.${label}\.img.)\s.*\s(num_partition_sectors=.[0-9]+.)\s.*\s(start_sector=.[0-9]+.).*,\1; \2; \3;,p" "$input" | head -n1)

out=$filename
off=${start_sector:-0}
end=${num_partition_sectors:-0}

printf '%s\n' "${label}"_+([0-9]).img | cut -d. -f1 | sort -t_ -k2n | xargs -n1 -I_ echo _.img | \
while read -r file
  do
    source <(sed -nr "s,.*\s(filename=.${file}.)\s.*\s(num_partition_sectors=.[0-9]+.)\s.*\s(start_sector=.[0-9]+.).*,\1; \2; \3;,p" "$output" | head -n1)
    dd if="$filename" of="$out" bs=${bs:-512} count=${num_partition_sectors:-0} seek=$((start_sector-off)) status=none || exit 1
    echo "filename=$filename num_partition_sectors=$num_partition_sectors start_sector=$((start_sector-off))"
done

dd if=/dev/zero of="$out" bs=${bs:-512} count=0 seek=$end status=none || exit 1
echo "filename=$out num_partition_sectors=$end start_sector=$off"

file "$out"
e2fsck -n "$out" | grep clean || exit 1
mv "$out" "${out%.*}.raw"
img2simg "${out%.*}.raw" "$out" || exit 1
file "$out"
echo "Done."

exit 0

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