3 votos

¿Cómo instalar un firmware sin perder los datos y restaurar el anterior en caso de que falle?

Tengo un OnePlus 5T y no puedo instalar más actualizaciones de OTA porque mi firmware es demasiado viejo. Además no tengo una copia de seguridad completa de mi dispositivo porque estoy usando encriptación y TWRP no lo entiende.

Me gustaría simplemente probar el nuevo firmware y revertirlo en caso de que algo salga mal sin perder ningún dato. ¿Es eso posible?

No estoy exactamente seguro de lo que firmware significa en este contexto y dónde conseguirlo, pero mirando a el sitio web Hay esta descarga para un archivo zip con el siguiente contenido: file tree

Estoy bastante seguro de que esta es la ROM completa, lo que significa que si la instalara, borraría todo y reemplazaría mi LineageOS con la ROM de serie.

Lo que me gustaría hacer es simplemente flashear "el firmware" y sólo el firmware sin perder los datos de mi almacenamiento interno y tampoco los datos de mis aplicaciones, contactos, sms, contraseñas wifi, emparejamientos bluetooth etc etc.

Y antes de eso me gustaría crear una copia de seguridad de mi antiguo firmware para poder volver atrás en caso de que salga mal.

¿Se puede hacer esto? ¿Puede hacerse con fastboot ?

Tal vez usando fastboot flash PARTITION [FILENAME] y algún otro comando para hacer el respaldo?

Editar:

El actualizador-script en META-INF/com/google/android/update-script contiene el siguiente código:

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);

¿Debería tomar el msm.boot_update("main"), y el msm.boot_update("finalize"), y las muestra de esta manera?

# 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

¿O esto ya sobrescribiría una partición que contiene algún tipo de datos de usuario? ¿Puedo hacer una copia de seguridad de estas particiones primero? ¿Y qué hay de RADIO/static_nvbk.bin , boot.bin , system.transfer.list , vendor.transfer.list y todo eso msm.boot_update("backup"), ¿Cosas?

Editar: Terminé no pudiendo flashear esos archivos de firmware a través de fastboot porque requiere más que un cargador de arranque desbloqueado "normal". Si hubiera hecho el paso necesario para desbloquear el cargador de arranque más adelante, habría borrado todos mis datos. Afortunadamente puedes evitarlo creando un zip con los archivos de firmware y un OpenRecoveryScript personalizado (updater-script). Encontré un increíble proyecto GitHub que automatiza todo el proceso: https://github.com/angela-d/firmware_oneplus

Simplemente cargué de lado la cremallera generada a través de adb sideload firmware-update-oneplus5T.zip y finalmente pude instalar mis actualizaciones de OTA.

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

0 votos

si tu dispositivo está rooteado otro método para la copia de seguridad (sólo datos de usuario)

0 votos

En /dev/block/mmcblk0 ¿Incluye mi almacenamiento interno, mis datos de aplicaciones, contactos, sms, contraseñas de wifi, emparejamientos de bluetooth, ajustes del sistema, etc.? ¿Has probado personalmente ese método en un dispositivo encriptado?

0 votos

mmcblk0 es todo el chip que contiene TODAS las particiones incluyendo la clave de encriptación. no, nunca lo he intentado personalmente

5voto

alecxs Puntos 29

1) Puedes arrancar en la recuperación de TWRP desde el arranque rápido

fastboot boot twrp.img

2) Entonces puedes hacer una copia de seguridad de todo tu Emmc de Adb.

adb pull /dev/block/mmcblk0

twrp_adb_pull_mmcblk0.bmp

¿Incluye /dev/block/mmcblk0 mi almacenamiento interno, los datos de mis aplicaciones, contactos, sms, contraseñas wifi, emparejamientos bluetooth, configuración del sistema, etc.? ¿Ha probado personalmente ese método en un dispositivo cifrado?

Todo se almacena en la partición de datos de usuario. Si TWRP es capaz de desencriptar, debería tirar /dev/block/dm-0 (=userdata) para obtener la copia de seguridad no encriptada.

De lo contrario, todavía puede separar la partición encriptada USERDATA (y la partición correlativa EFS/METADATA necesaria para el desencriptado) de mmcblk0

Investiga cómo funciona la encriptación para tu dispositivo, ¡no puedo ayudar con las particiones que se requieren!

3) imprimir tabla de partición con inicio/tamaño

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) copiar las particiones en archivos individuales (las particiones varían para cada modelo de dispositivo, esto es sólo un ejemplo para FDE. a veces los metadatos son un archivo ubicado en la partición EFS, a veces el pie de página de cifrado se concatena con la propia partición userdata)

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

esto es sólo un ejemplo para una mejor comprensión y es muy lento (10 kB/s). por supuesto que dd se copiará más rápido cuando aumentemos el tamaño del bloque, así que calcula los bytes en bloques 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) Repita esto para todas las particiones requeridas. para el éxito del sistema de desencriptación y el proveedor puede ser necesario también. tenga cuidado, sólo puede desencriptar con rom correlación en este dispositivo único en sí. desencriptación en otro dispositivo (incluso el mismo modelo no funcionará)

6) para restaurar puedes hacer un flash de esta partición desde el arranque rápido

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

otro método es la restauración de adb

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

o incluso desde el interior de la 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

ACTUALIZACIÓN DEL FIRMWARE

Para la actualización del firmware recomiendo flashear el stock completo de rom (perderás todos los datos), luego flashear LineageOS, y luego restaurar la copia de seguridad twrp. data.ext4.win* (que, por supuesto, ha creado a partir del trabajo de TWRP antes)

otro método está usando sdat2img para convertir el sistema.new.dat.y.vendor.new.dat.en imágenes ext4 sistema.img.y.vendor.img, que se pueden flashear junto con otras particiones desde el arranque rápido

por favor, también lea las preguntas de los entusiastas de los Androids Enlazado y Relacionado sección

1 votos

El OpenRecoveryScript que github.com/angela-d/firmware_oneplus poner el zip que he flasheado para actualizar el firmware+radio queda así: github.com/angela-d/firmware_oneplus/blob/master/update/op5t/ Así que las particiones son oem_stanvbk, cmnlib64, cmnlib, hyp, pmic, tz, abl, devcfg, keymaster, xbl, rpm, LOGO, modem, dsp y bluetooth. El flasheo manual vía fastboot requiere fastboot flashing unlock_critical (borra tus datos), así que he flasheado el archivo zip generado para evitarlo..

1 votos

bonito script! así que tenías razón con sólo flashear todo excepto el arranque del proveedor del sistema

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