2 votes

Comment faire un fichier d'image clairsemé à partir du firmware original ?

J'ai accidentellement effacé /system partition et maintenant mon téléphone Gionee S10C est bricolé.

J'ai téléchargé le micrologiciel original, mais je peux voir une série de fichiers d'image système (ce micrologiciel doit être utilisé par Qualcomm Flash Image Loader).

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

Lorsque j'essaie d'installer le firmware original à l'aide de QFIL en mettant le téléphone en mode EDL, j'obtiens sahara fail error . (Même erreur dans aquí et j'ai essayé la plupart des corrections que je peux trouver, mais rien ne fonctionne)

Maintenant, y a-t-il un moyen d'utiliser les 53 images système ci-dessus pour restaurer mon téléphone à l'aide de fastboot flash commande ?

Je suis sûr que seulement system doit être restaurée pour que mon téléphone fonctionne à nouveau, car je n'ai pas modifié d'autres partitions.

3voto

alecxs Points 3105

Concaténation de fichiers avec dd seek=$offset à partir de xml, puis sparse avec img2simg

rawprogram0.xml contient

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

rawprogram_unsparse.xml contient system_1.img - system_53.img

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

Note : nous ne voulons pas le décalage, donc nous allons soustraire 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"

Utilisez maintenant le dd seek paramètre pour coller les jonques dans les offsets appropriés
(sparse est rempli de zéros)

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

le résultat est une image de partition ext4 montable

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

enfin ce fichier peut être espacé avec img2simg

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

Script GNU bash avec 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

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X