|
||
|
![]() |
![]() |
ROMs y desarrollo Xiaomi Mi A2 ROMs y desarrollo Xiaomi Mi A2 |
![]() |
|
Herramientas |
#1
|
||||
|
||||
![]()
ANTECENDENTES
Dado que a Xiaomi parece que le cuesta filtrar los Firmware (en fotmato .TGZ) flasheables mediante MiFlash para el Xiaomi Mi A2, y que las únicas versiones que se están filtrando son los Firmware (.ZIP) para flashear mediante el Recovery con Sideload, nos quedamos algo limitados a la hora de restablecer nuestro dispositivo con un Firmware oficial, por el motivo que sea. Existen 2 métodos para hacer uso del contenido de esos .ZIP. Como he dicho anteriormente, uno sería flashearlo desde el Recovery, mediante sideload [PHP]adb sideload update.zip[/PHP] y el otro método sería flashearlo mediante comandos fastboot, PERO esto no es tan evidente, dado que dentro del .ZIP no encontramos directamente ficheros para flashear mediante fastboot. OBJETIVO Describir el procedimiento para partiendo del .ZIP del Firmware completo para Recovery, obtener los ficheros de las particiones que se podrán flashear mediante comandos fastboot. REQUISITOS
PROCEDIMIENTO Haré el ejemplo con la última versión disponible ahora mismo, la de Abril V11.0.8.0.QDIMIXM. Descomprimimos dentro de una carpeta ese ZIP y obtendremos lo siguiente
(Click para mostrar/ocultar)
Como vemos, ahí dentro no están los típicos boot.img, modem.img, system.img, etc... En realidad se encuentran dentro del fichero payload.bin. Por lo que vamos a tener que descompilar ese payload.bin. Para ello haremos uso de una herramienta escrita en Python, o de una versión ejecutable que han adaptado para Windows x64. Descomprimimos esta herramienta, por ejemplo en la misma carpeta en la que estamos trabajando. Si usásemos la versión en Python (obviamente tendríamos que tener instalado Python y las dependencias que pide), que nos serviría para diferentes sistemas operativos, el comando que tendríamos que usar es: Linux [PHP]python3 payload_dumper.py payload.bin[/PHP] Windows [PHP]py payload_dumper.py payload.bin[/PHP] Y si usamos la versión ejecutable en Windows, veremos al descomprimirla que nos crea 2 carpetas (payload_input / payload_output). Es tan simple como copiar/mover el fichero payload.bin al interior de la carpeta payload_input.
(Click para mostrar/ocultar)
Luego ejecutamos el fichero payload_dumper.exe, y vemos que en una ventana de comandos, van saliendo la lista de ficheros que descompila. Tras un ratito, acabará y se cierra automáticamente.
(Click para mostrar/ocultar)
Los ficheros resultantes de esta descompilación, los tendremos dentro de la carpeta output / payload_output (según la versión usada, de python o Windows).
(Click para mostrar/ocultar)
En esa lista de ficheros, nos faltarían aún 4 ficheros más para tener los mismos que en el interior de los Firmware en .TGZ, aunque sólo nos harán falta 3 más (no nos hace falta system_other.img): [PHP]storsec.mbn splash.img userdata.img[/PHP] El fichero storsec.mbn lo he extraído de mi smartphone, y resulta que es idéntico (bit a bit) al que venía en el Firmware (.TGZ) de Android 9, luego parece que es siempre igual. Os dejo aquí el que he extraído del mio. O en su defecto se podrá usar el que saquemos del último .TGZ con Android 9. El fichero splash.img, se encarga de las imágenes del inicio del arranque, la cual varió de Android 9 a Android 10. Por lo tanto tendríamos que extraerlo de un Mi A2 con Android 10. Os dejo aquí el que he extraído del mio. Y el fichero userdata.img, no debería de ser excesivamente importante el que tuviera ligeras diferencias, pues ahí al final lo que haremos será llenarlo con nuestras cosas (programas, configuraciones, fotos, videos, etc...). No obstante, tras flashear todo esto e iniciar el smartphone por primera vez, le haremos un Factory reset desde el Recovery Stock para que formatee esa partición y quede completamente a su gusto. Por lo tanto, usaremos como userdata.img, la última que tengamos disponible, en nuestro caso es la que contiene el .TGZ del Firmware V10.0.17.0.PDIMIXM. De este modo, ya tendríamos todos los ficheros necesarios para flashearnos mediante comandos fastboot, el Firmware.
(Click para mostrar/ocultar)
Última edición por LEPT Día 28/08/20 a las 14:59:24. |
Gracias de parte de: | ||
|
#2
|
||||
|
||||
![]()
Un supuesto en el que sería realmente útil este método frente al de flashear el .ZIP original con el Recovery, podría ser que siendo root hayas desinstalado apps del sistema o modificado parámetros del sistema, o de alguna otra partición, y cuando te llega la nueva OTA, no se te instala.
En ese caso, yo lo que haría sería lo siguiente: 1º Flasheo estos ficheros obtenidos anteriormente, en el slot contrario al que estoy usando normalmente, lo que me dejaría un sistema nuevo sin modificar nada. Y tras flashearlo en ese otro slot, le digo que arranque en ese otro slot. Los comandos para flashearlo serían: en slot a: [PHP]fastboot flash bluetooth_a bluetooth.img fastboot flash devcfg_a devcfg.img fastboot flash dsp_a dsp.img fastboot flash modem_a modem.img fastboot flash xbl_a xbl.img fastboot flash pmic_a pmic.img fastboot flash rpm_a rpm.img fastboot flash tz_a tz.img fastboot flash hyp_a hyp.img fastboot flash keymaster_a keymaster.img fastboot flash cmnlib64_a cmnlib64.img fastboot flash cmnlib_a cmnlib.img fastboot flash abl_a abl.img fastboot flash boot_a boot.img fastboot flash system_a system.img fastboot flash vendor_a vendor.img fastboot flash mdtp_a mdtp.img fastboot flash userdata userdata.img fastboot flash splash splash.img fastboot flash mdtpsecapp_a mdtpsecapp.img fastboot flash storsec storsec.mbn fastboot erase ddr fastboot set_active a pause fastboot reboot[/PHP] en slot b: [PHP]fastboot flash bluetooth_b bluetooth.img fastboot flash devcfg_b devcfg.img fastboot flash dsp_b dsp.img fastboot flash modem_b modem.img fastboot flash xbl_b xbl.img fastboot flash pmic_b pmic.img fastboot flash rpm_b rpm.img fastboot flash tz_b tz.img fastboot flash hyp_b hyp.img fastboot flash keymaster_b keymaster.img fastboot flash cmnlib64_b cmnlib64.img fastboot flash cmnlib_b cmnlib.img fastboot flash abl_b abl.img fastboot flash boot_b boot.img fastboot flash system_b system.img fastboot flash vendor_b vendor.img fastboot flash mdtp_b mdtp.img fastboot flash userdata userdata.img fastboot flash splash splash.img fastboot flash mdtpsecapp_b mdtpsecapp.img fastboot flash storsec storsec.mbn fastboot erase ddr fastboot set_active b pause fastboot reboot[/PHP] Así tendría, en un slot la versión del Firmware que he estado usando hasta entonces con todas mis modificaciones, y en el otro slot la versión del Firmware limpia y sin tocar que acabo de flashear. Un par de observaciones del proceso de flasheo:
2º Arranco el móvil, y me arrancará en el slot nuevo, con todo nuevo. Lo configuro mínimamente, y le doy a comprobar y actualizar OTA. Así la nueva OTA debería encontrarse todo de fábrica y actualizarse correctamente. Y de este modo, el proceso de actualización de la OTA, lo que haría sería meter en el slot viejo todo el nuevo sistema actualizado ya, y arrancaría allí. Lo que tendría tras actualizar, sería un slot activo con la última versión recién actualizada, y un slot inactivo con la versión anterior que habíamos flasheado limpia. Además, que con esto de haber empezado flashando en el otro slot al activo que tenía toquiteado, si me fallara algo con esos ficheros que flasheo, siempre podría indicarle que arrancara en el slot anterior (el que tengo toquiteado) que arrancaba normal, y no habría pasado nada. Un último detalle a realizar tras actualizarse la OTA e iniciarse el smartphone. Lo apagamos, e iniciamos en el Recovery Stock:
Allí elegimos la opción de Wipe data/factory reset. Y después de realizar ese proceso, elegimos Reboot system now. Ahora ya sí, configuramos nuestro Mi A2 a nuestro gusto, en la última versión de Firmware. ![]() Última edición por LEPT Día 27/04/20 a las 15:34:32. |
Gracias de parte de: | ||
#3
|
||||
|
||||
Buen tutorial , claro y detallado. En tu línea.
Muchas gracias , gran hombre.👍 |
![]() |
![]() |
||||||
|
Herramientas | |