3 votes

Comment installer un micrologiciel sans perdre vos données et restaurer le précédent en cas de problème ?

J'ai un OnePlus 5T et je ne peux plus installer les mises à jour OTA car mon firmware est trop ancien. En plus de cela, je n'ai pas de sauvegarde complète de mon appareil car j'utilise le cryptage et TWRP ne le comprend pas.

Je voudrais simplement essayer le nouveau firmware et revenir en arrière en cas de problème sans perdre de données. Est-ce possible ?

Je ne suis pas exactement sûr de ce que firmware signifie dans ce contexte et où l'obtenir, mais en regardant la le site web il y a ce téléchargement pour un fichier zip avec le contenu suivant : file tree

Je suis presque sûr qu'il s'agit de la ROM stock complète, ce qui signifie que si je l'installais, elle effacerait tout et remplacerait mon LineageOS par la ROM stock.

Ce que je voudrais faire, c'est simplement flasher "le firmware" et seulement le firmware sans perdre les données sur mon stockage interne et également pas mes données d'application, contacts, sms, mots de passe wifi, pairage bluetooth etc etc .

Et avant cela, j'aimerais créer une sauvegarde de mon ancien firmware afin de pouvoir revenir en arrière en cas de problème.

Est-ce que cela peut être fait ? Peut-on le faire avec fastboot ?

Peut-être en utilisant fastboot flash PARTITION [FILENAME] et une autre commande pour faire la sauvegarde ?

Editar:

Le script de mise à jour dans META-INF/com/google/android/update-script contient le code suivant :

getprop("ro.display.series") == "OnePlus 5T" || abort("E3004: This package is for \"OnePlus 5T\" devices; this is a \"" + getprop("ro.display.series") + "\".");
is_part_existed("/dev/block/bootdevice/by-name/vendor") || abort("vendor partition is not existed, exit ota!!");
show_progress(0.650000, 0);
ui_print("Patching system image unconditionally...");
block_image_update("/dev/block/bootdevice/by-name/system", package_extract_file("system.transfer.list"), "system.new.dat", "system.patch.dat") ||
  abort("E1001: Failed to update system image.");
show_progress(0.100000, 0);
ui_print("Patching vendor image unconditionally...");
block_image_update("/dev/block/bootdevice/by-name/vendor", package_extract_file("vendor.transfer.list"), "vendor.new.dat", "vendor.patch.dat") ||
  abort("E2001: Failed to update vendor image.");
show_progress(0.050000, 10);
show_progress(0.050000, 5);
package_extract_file("boot.img", "/dev/block/bootdevice/by-name/boot");
show_progress(0.200000, 10);
ui_print("Writing static_nvbk image...");
package_extract_file("RADIO/static_nvbk.bin", "/dev/block/bootdevice/by-name/oem_stanvbk");

# ---- radio update tasks ----

ui_print("Patching firmware images...");
ifelse(msm.boot_update("main"), (
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlib");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hyp");
package_extract_file("firmware-update/pmic.elf", "/dev/block/bootdevice/by-name/pmic");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tz");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/abl");
package_extract_file("firmware-update/devcfg.mbn", "/dev/block/bootdevice/by-name/devcfg");
package_extract_file("firmware-update/keymaster.mbn", "/dev/block/bootdevice/by-name/keymaster");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xbl");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpm");
), "");
ifelse(msm.boot_update("backup"), (
package_extract_file("firmware-update/cmnlib64.mbn", "/dev/block/bootdevice/by-name/cmnlib64bak");
package_extract_file("firmware-update/cmnlib.mbn", "/dev/block/bootdevice/by-name/cmnlibbak");
package_extract_file("firmware-update/hyp.mbn", "/dev/block/bootdevice/by-name/hypbak");
package_extract_file("firmware-update/tz.mbn", "/dev/block/bootdevice/by-name/tzbak");
package_extract_file("firmware-update/abl.elf", "/dev/block/bootdevice/by-name/ablbak");
package_extract_file("firmware-update/keymaster.mbn", "/dev/block/bootdevice/by-name/keymasterbak");
package_extract_file("firmware-update/xbl.elf", "/dev/block/bootdevice/by-name/xblbak");
package_extract_file("firmware-update/rpm.mbn", "/dev/block/bootdevice/by-name/rpmbak");
), "");
msm.boot_update("finalize");
package_extract_file("firmware-update/logo.bin", "/dev/block/bootdevice/by-name/LOGO");
package_extract_file("firmware-update/NON-HLOS.bin", "/dev/block/bootdevice/by-name/modem");
package_extract_file("firmware-update/adspso.bin", "/dev/block/bootdevice/by-name/dsp");
package_extract_file("firmware-update/BTFM.bin", "/dev/block/bootdevice/by-name/bluetooth");
set_progress(1.000000);

Je devrais juste prendre le msm.boot_update("main"), et le msm.boot_update("finalize"), et de les flasher comme ça ?

# main
fastboot flash cmnlib64 ./firmware-update/cmnlib64.mbn
fastboot flash cmnlib ./firmware-update/cmnlib.mbn
fastboot flash hyp ./firmware-update/hyp.mbn
fastboot flash pmic ./firmware-update/pmic.mbn
fastboot flash tz ./firmware-update/tz.mbn
fastboot flash abl ./firmware-update/abl.elf
fastboot flash keymaster ./firmware-update/keymaster.mbn
fastboot flash xbl ./firmware-update/xbl.elf
fastboot flash rpm ./firmware-update/rpm.mbn

# finalize
fastboot flash LOGO ./firmware-update/logo.bin
fastboot flash modem ./firmware-update/NON-HLOS.bin
fastboot flash dsp ./firmware-update/adspso.bin
fastboot flash bluetooth ./firmware-update/BTFM.bin

Ou est-ce que cela écraserait déjà une partition qui contient une sorte de données utilisateur ? Puis-je faire une sauvegarde de ces partitions d'abord ? Et qu'en est-il RADIO/static_nvbk.bin , boot.bin , system.transfer.list , vendor.transfer.list et tout ça msm.boot_update("backup"), des trucs ?

Editar: J'ai fini par ne pas être en mesure de flasher ces fichiers firmware via fastboot car cela nécessite plus qu'un bootloader déverrouillé "normal". Si j'avais fait l'étape nécessaire pour déverrouiller le bootloader plus loin, cela aurait effacé toutes mes données. Heureusement, vous pouvez contourner cela en créant un zip avec les fichiers du firmware et un OpenRecoveryScript (updater-script) personnalisé. J'ai trouvé un projet GitHub génial qui automatise tout le processus : https://github.com/angela-d/firmware_oneplus

J'ai simplement téléchargé le zip généré par l'intermédiaire de adb sideload firmware-update-oneplus5T.zip et finalement j'ai pu installer mes mises à jour OTA.

https://github.com/angela-d/firmware_oneplus

5voto

alecxs Points 3105

1) Vous pouvez démarrer dans TWRP recovery depuis fastboot

fastboot boot twrp.img

2) Ensuite vous pouvez sauvegarder tout votre emmc à partir d'adb

adb pull /dev/block/mmcblk0

twrp_adb_pull_mmcblk0.bmp

Est-ce que /dev/block/mmcblk0 inclut mon stockage interne, mes données d'applications, mes contacts, mes sms, mes mots de passe wifi, mes paires bluetooth, mes paramètres système, etc ? Avez-vous personnellement essayé cette méthode sur un appareil crypté ?

Tout est stocké dans la partition userdata. Si TWRP est capable de décrypter, vous devriez tirer /dev/block/dm-0 (=userdata) pour obtenir la sauvegarde non cryptée.

Sinon, vous pouvez toujours séparer la partition chiffrée USERDATA (et la partition corrélée EFS/METADATA requise pour le déchiffrement) de mmcblk0

Faites une recherche sur la façon dont le cryptage fonctionne pour votre appareil, je ne peux pas vous aider à déterminer quelles partitions sont nécessaires !

3) imprimer la table de partition avec début/taille

parted mmcblk0 unit B print

Warning: Not all of the space available to mmcblk0 appears to be used, you can fix the GPT to use all of the space (an extra 991 blocks) or continue with the current setting? 
Fix/Ignore? i                                                             
Model:  (file)
Disk mmcblk0: 15300820992
Sector size (logical/physical): 512/512
Partition Table: gpt
Disk Flags: 

Number  Start         End           Size          File system  Name         Flags
 1      524288        3670015       3145728                    proinfo      msftdata
 2      3670016       8912895       5242880                    nvram        msftdata
 3      8912896       19398655      10485760      ext4         protect1     msftdata
 4      19398656      29884415      10485760      ext4         protect2     msftdata
 5      29884416      30146559      262144                     seccfg       msftdata
 6      30146560      30539775      393216                     lk           msftdata
 7      30539776      47316991      16777216                   boot         msftdata
 8      47316992      64094207      16777216                   recovery     msftdata
 9      64094208      64618495      524288                     para         msftdata
10      64618496      73007103      8388608                    logo         msftdata
11      73007104      83492863      10485760                   expdb        msftdata
12      83492864      84541439      1048576                    frp          msftdata
13      84541440      118095871     33554432      ext4         nvdata       msftdata
14      118095872     159383551     41287680                   metadata     msftdata
15      159383552     161480703     2097152                    oemkeystore  msftdata
16      161480704     167772159     6291456                    secro        msftdata
17      167772160     176160767     8388608                    keystore     msftdata
18      176160768     2801795071    2625634304    ext4         system       msftdata
19      2801795072    3070230527    268435456     ext4         cache        msftdata
20      3070230528    15283519487   12213288960   ext4         userdata     msftdata
21      15283519488   15300296703   16777216                   flashinfo    msftdata

4) copier les partitions dans des fichiers uniques (les partitions varient pour chaque modèle de dispositif, c'est juste un exemple pour FDE. parfois les métadonnées sont un fichier situé dans la partition EFS, parfois le pied de page de cryptage est concaténé à la partition userdata elle-même)

dd if=mmcblk0 of=metadata.bin skip=118095872 count=41287680 bs=1
dd if=mmcblk0 of=userdata.img skip=3070230528 count=12213288960 bs=1

ceci n'est qu'un exemple pour une meilleure compréhension et est très lent (10 kB/s). Bien sûr, dd copiera plus rapidement si nous augmentons la taille des blocs, donc calculez les octets en blocs de 8k.

12213288960 / 8192 = 1490880

dd if=mmcblk0 of=metadata.bin skip=14416 count=5040 bs=8k
dd if=mmcblk0 of=userdata.img skip=374784 count=1490880 bs=8k

5) répétez ceci pour toutes les partitions requises. pour un décryptage réussi le système et le fournisseur peuvent être requis aussi. attention vous pouvez seulement décrypter avec la rom corrélative sur cet appareil unique lui-même. le décryptage sur un autre appareil (même le même modèle ne fonctionnera pas)

6) pour la restauration vous pouvez flasher cette partition dumps à partir de fastboot

fastboot flash userdata userdata.img
fastboot flash metadata metadata.bin

une autre méthode est de restaurer à partir d'adb

adb push userdata.img /dev/block/bootdevice/by-name/userdata
adb push metadata.bin /dev/block/bootdevice/by-name/metadata

ou même depuis le terminal twrp

dd if=/external_sd/userdata.img of=/dev/block/bootdevice/by-name/userdata
dd if=/external_sd/metadata.bin of=/dev/block/bootdevice/by-name/metadata

MISE À JOUR DU FIRMWARE

Pour la mise à jour du firmware, je recommande de flasher la rom stock complète (vous perdrez toutes les données), puis de flasher LineageOS, puis de restaurer la sauvegarde twrp. data.ext4.win* (que vous avez bien sûr créé en travaillant sur TWRP auparavant)

une autre méthode consiste à utiliser sdat2img pour convertir system.new.dat et vendor.new.dat en images ext4 system.img et vendor.img, que vous pouvez flasher avec d'autres partitions depuis fastboot

Veuillez également lire les questions des enthousiastes d'Android. Lié à y Related section

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