"Después del juego es antes del juego"
Sepp Herberger

viernes, 5 de agosto de 2016

Xiaomi no mola

No todo es salir del paso y a veces lo que intentamos fracasa estrepitosamente, aunque esté considerado de mal gusto hablar de ello. Pues no será así hoy: de todas las cosas que me toca hacer hay veces que tiro horas por /dev/null sin lograr nada más que una merecida lección que me pone en mi sitio. Por ejemplo, si necesito bajarme los humos nada mejor que echar un rato con el ladrillo que antes era un Xiaomi Redmi 1S.

Me compré el móvil de segunda mano aproximadamente en julio de 2015. La gente contaba (y cuenta) maravillas sobre Xiaomi y sus estupendos productos, así que adquirí un móvil casi nuevo. Traía interfaz Miui vistosa y pulida, la cámara era bastante buena y en general el funcionamiento era ligero. Pero, vaya... la batería de 2000mAh se quedaba corta. No es tolerable que después de quitarlo del cargador a las 7:30 cuando llega la hora de comer, sin haber apenas tocado el móvil para una o dos llamadas breves y 4 whatsapps, estuviese la batería al 75%. Mis móviles Android anteriores, con menos batería y potencia no sufrían tal drenaje injustificado.

Buscando en Internet resulta que este comportamiento es normal ahora. Ya me ha pasado recientemente con otro móvil, un Doogee X5 Pro, que había que cargar a media tarde para poder usarlo hasta final de día (que es cuando usamos intensivamente el móvil los multipadres de estos tiempos). Por ese motivo ya no compro ningún móvil que tenga menos de 4000mAh de batería y directamente no me creo la historia de los que afirman que si, que les duran sus 2X00mAh hasta la noche con 4 horas de pantalla.

El Xiaomi Redmi 1S por lo visto podía mejorarse cambiando la ROM y poniendo luego un kernel ad-hoc que multiplicaba las horas de autonomía milagrosamente, ya que el software por defecto era bastante manirroto con el consumo de energía. Dediqué varios días a probar versiones sin ninguna mejora significativa que mereciese la pena ("...espera a que se calibre bien la batería, decían en los foros....¡ya!") ....hasta que sucedió la primera catástrofe.

Una noche cargué una ROM y al reiniciar no tenía señal de red telefónica. Ni 2G, ni 3G ni nada. Reinicié una vez mas y al volver tampoco tenía Wifi. Al día siguiente me puse a investigar y entonces me doy cuenta de que mi móvil ha perdido el IMEI y las MAC de la Wifi y el Bluetooth. Esos datos se guardan en diversas particiones del "disco duro" del móvil y por algún motivo se habían machacado. A partir de aquí aquí constato varias cosas:

  • Que la perdida de IMEIs, Baseband y MAC no es infrecuente en los Xiaomi.
  • Que si tienes CPU Mediatek es bastante sencillo fijar de nuevo el IMEI y otros datos perdidos, con el modo ingeniero o usando applicaciones de terceros como las Uncle Tool.
  • Que si tienes CPU SnapDragon, como es mi caso, estás jodido. No hay un método sencillo y los que probé no funcionaron.
  • No funcionó usando una esotérica aplicación llamada QPST y sus satélites QFil, eMMC downloader, etc.
  • No funcionó leyendo e intentando sacar algo en claro los delirantes, autoreferenciados y nada lógicos posts de la página turca de Androidbrick. Parecen una broma de Erdogan y los otomanos a Occidente en venganza por la batalla de Lepanto,
  • No funcionó pidiendo ayuda en los foros oficiales de Miui http://en.miui.com ni en los semioficiales http://miui.es, que además de tener una estética y contenido que parecerían naïf al mismo Doraemon tienen mucha paja entre la información relevante. Su único gran consejo era que "esperase a la siguiente ROM oficial y reflashease". Como si una ROM nueva fuera a traerme de vuelta las particiones perdidas.
  • Si que saqué claro que si tienes un móvil con SnapDragon no está de más hacer un backup de esas particiones usando adb y guardarlas en lugar seguro para restaurarlas si hay una catástrofe. Como dice mi amigo Pedro, mas vale un por si acaso que cien mecagoend10s. Aquí viene como hacerlo para un Redmi 1S como el mío. Para otros modelos las particiones no serían "mmcblk0p16_modemst1" y siguientes, pero no es díficil averiguar cuales son ya que la buena gente suele publicar eso para otros móviles.
    Hay incluso aplicaciones como ésta (manual) o ésta que te hacen el backup sin tener que teclear comandos mediante la shell del adb.
  • Por supuesto, intentar hablar directamente con Xiaomi o Qualcomm (fabricantes de los SnapDragon) usando sus soportes oficiales es como hablar con el Ser Inmutable de Parménides.
  • En la desesperación, encontré un post en indonesio en el que alguien compartía en Dropbox el backup de esas particiones. Lo descargué y lo probé sin éxito. En teoría eso equivale a clonar el IMEI y piensas que va a aparecer Jack Bauer por la ventana a detenerte, pero tampoco es para tanto.
  • La solución "oficial" es cambiar la placa base, pero si el móvil está fuera de garantía eso cuesta casi tanto como uno nuevo. Descartado.
Estaba resignado a usar el móvil de reproductor MP3, cámara de fotos y GPS, sin ninguna conectividad exterior, pero cualquier situación siempre es susceptible de empeorar: una mañana estaba cargando y se apagó para siempre. Nunca mas volvió a encender ni siquiera en modo Fastboot, aunque al conectarlo al puerto USB de un PC se detectaba algo durante un tiempo, al final no aparecía nada. Llevé el móvil a un par de técnicos y ambos me certificaron que tenía un ladrillo con la placa base frita. Llegados a este punto me rendí y dejé el móvil en un cajón. Pasado un año y aprovechando el tiempo libre del verano me decidí a darle una vuelta al tema. A lo largo del año habia ido acumulando alguna documentación nueva. Una de ellas era usar el método del cortocircuito para revivir al móvil: desmontándolo hay 2 puntos llamados "test point" que podemos puentear con un cable o unas pinzas y eso puede poner el móvil en un modo llamado "Qualcomm Download Mode o QDL" (que no es el modo Recovery ni Fastboot, sino otro modo un par de escalones mas cerca del Infierno) desde el que usando la herramienta MiFlash se podía cargar el firmware completo (usando una ROM Fastboot) y revivirlo. Los puntos a cortocircuitar uniéndolos son los dos círculos plateados bajo la ranura SIM izquierda:
Es importante deshabilitar de forma temporal el requisito de drivers firmados en Windows (o de forma permanente aquí) y preparar bien el cable para hacer el cortocircuto entre ambos test point. Para cortocircuitar yo he usado 3 pines para soldadura ya que casualmente la distancia entre el primero y tercero coinciden con la distancia entre los dos test point.
Para poder hacer el cortocircuito he unido ambos pines con un cable dupont hembra-hembra, quedando:
Una vez preparada la parte de hardware, instalamos MiFlash, deshabilitamos la firma de drivers en Windows, abrimos MiFlash y conectamos el cable USB de carga/datos al PC. Por otro lado, descargamos una ROM Fastboot para nuestro Redmi 1S y la descomprimimos, guardando los ficheros en una ruta corta y sin espacios en blanco, por ejemplo c:\armani (armani es el nombre en clave que pone Xiaomi al modelo Redmi 1S). Los ficheros descomprimidos estarán en c:\armani y c:\armani\images (por ejemplo debe haber un C:\armani\images\MPRG8626.mbn). En MiFlash le damos a Browse y seleccionamos el directorio c:\armani. A continuación realizamos el cortocircuito tocando primero el pin de la izquierda y con cuidado y lentamente el de la derecha, vigilando que no se desconecten, tal como se ve:
Sin soltar pinchamos el cable USB en el móvil y en este punto debe sonar el "tachán" de detección de un disposivo USB en Windows. Si no se detecta nada hay que desconectar repetir la realización del cortocircuito hasta que se detecte.
Una vez detectado, con la tercera mano damos al botón de actualizar en MiFlash y vemos que ya aparece un COMx conectando con el móvil en QDL mode (si lo listamos con lsusb aparece como 05c6:9008). Esto es todo un avance, ya que traemos el móvil desde un estado de muerte clínica y ahora al menos parece dispuesto a interactuar. ¿Que pasa si soltamos los cables y quitamos el cortocircuito aquí?. Mi experiencia es que el móvil ya está en modo QDL y no hace falta seguir cortocircuitando ambos test point. De todas maneras, también he probado a hacer todo manteniendo el cortocircuito. Continuemos: ahora le damos al botón "Flash" de MiFlash y comienza el proceso de flasheo de la ROM y vemos como van apareciendo mensajes en pantalla. Si todo va bien en unos minutos acaba todo y el móvil reinicia mostrando flamante el sistema operativo. En mi caso no va bien: tras 10 o 15 segundos se queda en un "wait device connect..." y al final acaba dando un error diciendo que los drivers no están firmados. No es eso, el error sucede tras el "Reboot to mini kernel" :
[00001794]CreateManagedObject(1392): Error no especificado(0x80131604)
[00001794]GetFactoryObject(1436): Error no especificado(0x80131604)
[00001794]CreateManagedObject(1392): Se ha intentado cargar un programa con un formato incorrecto.(0x8007000b)
[00001794]GetFactoryObject(1436): Se ha intentado cargar un programa con un formato incorrecto.(0x8007000b)
[00001794]GetFactoryObject(1457): El servicio especificado no existe.(0x800704db)
[00001794]GetSearchPath(1512): El servicio especificado no existe.(0x800704db)
[00001794]StartFlash(13): El parámetro no es correcto.(0x80070057)
[00001E64]CEmergencyFlasher::IsQPSTServer(655): No implementado(0x80004001)
[00001E64]COM10 0.05 Load programmer "C:\armani\images\MPRG8626.mbn"
[00001E64]DownloadFlashProgrammerDMSS(625): Se ha intentado cargar un programa con un formato incorrecto.(0x8007000b)
[00001E64]DownloadFlashProgrammer(946): Se ha intentado cargar un programa con un formato incorrecto.(0x8007000b)
[00001E64]COM10 0.05 Open programmer "C:\armani\images\MPRG8626.mbn"
[00001E64]COM10 0.05 Open serial port "\\.\COM10"
[00001E64]COM10 0.05 Receiving hello packet
[00001E64]COM10 0.05 Send hello response
[00001E64]COM10 0.05 ReadDataPacket id 13, offset 00000000, length 80
[00001E64]COM10 0.05 ReadDataPacket id 13, offset 0x000050, length 4096
[00001E64]COM10 0.06 ReadDataPacket id 13, offset 0x001050, length 4096
[00001E64]COM10 0.06 ReadDataPacket id 13, offset 0x002050, length 4096
[00001E64]COM10 0.06 ReadDataPacket id 13, offset 0x003050, length 4096
[00001E64]COM10 0.06 ReadDataPacket id 13, offset 0x004050, length 4096
[00001E64]COM10 0.06 ReadDataPacket id 13, offset 0x005050, length 4096
[00001E64]COM10 0.06 ReadDataPacket id 13, offset 0x006050, length 4096
[00001E64]COM10 0.06 ReadDataPacket id 13, offset 0x007050, length 4096
[00001E64]COM10 0.06 ReadDataPacket id 13, offset 0x008050, length 4096
[00001E64]COM10 0.06 ReadDataPacket id 13, offset 0x009050, length 972
[00001E64]COM10 0.06 EndTransferPacket id 13, status 0
[00001E64]COM10 0.06 Send done packet
[00001E64]COM10 0.06 Open boot file "C:\armani\images\8626_msimage.mbn"
[00001E64]COM10 0.06 Open serial port "\\.\COM10"
[00001E64]COM10 0.06 Send hello command 0
[00001E64]COM10 0.08 Enable trusted security mode
[00001E64]COM10 0.08 Open EMMC card USER partition
[00001E64]COM10 0.13 StreamWrite address 00000000, size 40960
[00001E64]COM10 0.20 StreamWrite address 0x00a000, size 40960
[00001E64]COM10 0.28 StreamWrite address 0x014000, size 40960
[00001E64]COM10 0.36 StreamWrite address 0x01e000, size 40960
[00001E64]COM10 0.44 StreamWrite address 0x028000, size 40960
[00001E64]COM10 0.52 StreamWrite address 0x032000, size 40960
[00001E64]COM10 0.59 StreamWrite address 0x03c000, size 40960
[00001E64]COM10 0.66 StreamWrite address 0x046000, size 40960
[00001E64]COM10 0.73 StreamWrite address 0x050000, size 40960
[00001E64]COM10 0.83 StreamWrite address 0x05a000, size 40960
[00001E64]COM10 0.89 StreamWrite address 0x064000, size 40960
[00001E64]COM10 0.95 StreamWrite address 0x06e000, size 40960
[00001E64]COM10 1.02 StreamWrite address 0x078000, size 40960
[00001E64]COM10 1.09 StreamWrite address 0x082000, size 40960
[00001E64]COM10 1.16 StreamWrite address 0x08c000, size 40960
[00001E64]COM10 1.22 StreamWrite address 0x096000, size 40960
[00001E64]COM10 1.31 StreamWrite address 0x0a0000, size 40960
[00001E64]COM10 1.38 StreamWrite address 0x0aa000, size 40960
[00001E64]COM10 1.44 StreamWrite address 0x0b4000, size 40960
[00001E64]COM10 1.52 StreamWrite address 0x0be000, size 40960
[00001E64]COM10 1.58 StreamWrite address 0x0c8000, size 40960
[00001E64]COM10 1.66 StreamWrite address 0x0d2000, size 40960
[00001E64]COM10 1.75 StreamWrite address 0x0dc000, size 40960
[00001E64]COM10 1.84 StreamWrite address 0x0e6000, size 40960
[00001E64]COM10 1.91 StreamWrite address 0x0f0000, size 40960
[00001E64]COM10 1.98 StreamWrite address 0x0fa000, size 40960
[00001E64]COM10 2.06 StreamWrite address 0x104000, size 40960
[00001E64]COM10 2.14 StreamWrite address 0x10e000, size 40960
[00001E64]COM10 2.22 StreamWrite address 0x118000, size 40960
[00001E64]COM10 2.30 StreamWrite address 0x122000, size 40960
[00001E64]COM10 2.38 StreamWrite address 0x12c000, size 40960
[00001E64]COM10 2.45 StreamWrite address 0x136000, size 40960
[00001E64]COM10 2.53 StreamWrite address 0x140000, size 40960
[00001E64]COM10 2.61 StreamWrite address 0x14a000, size 40960
[00001E64]COM10 2.69 StreamWrite address 0x154000, size 40960
[00001E64]COM10 2.78 StreamWrite address 0x15e000, size 40960
[00001E64]COM10 2.88 StreamWrite address 0x168000, size 40960
[00001E64]COM10 2.94 StreamWrite address 0x172000, size 40960
[00001E64]COM10 3.02 StreamWrite address 0x17c000, size 40960
[00001E64]COM10 3.09 StreamWrite address 0x186000, size 17920
[00001E64]COM10 3.13 Close EMMC card USER partition
[00001E64]COM10 3.14 Reboot to mini kernel
[00001E64]COM10 3.19 Wait device connect 0
[00001E64]COM10 4.22 Wait device connect 1
[00001E64]COM10 5.25 Wait device connect 2 
[00001E64]COM10 6.28 Wait device connect 3
[00001E64]COM10 7.31 Wait device connect 4
[00001E64]COM10 8.33 Wait device connect 5
[00001E64]COM10 9.38 Wait device connect 6
[00001E64]COM10 10.41 Wait device connect 7
[00001E64]COM10 11.44 Wait device connect 8
[00001E64]COM10 12.47 Wait device connect 9
[00001E64]COM10 13.50 Wait device connect 10
[00001E64]COM10 14.53 Wait device connect 11
[00001E64]COM10 15.56 Wait device connect 12
Y de aquí no salimos, parece que la carga del MiFlash no pasa de los primeros estadios. He probado diversas ROM y versiones de MiFlash por si fuera eso, sin éxito. A intentar hacerlo con la batería puesta de forma precaria, sin éxito. Y poco mas: mi móvil está tan dobleplusbrickeado que ni el QDL mode acaba de traerlo a la vida. Abandono de nuevo con el rabo entre las piernas y 6 u 8 horas de trabajo improductivo. Quizá el próximo año tenga mas soluciones o bien tenga que usar algo parecido JTAG para flashear directamente el dispositivo por hardware... No, en serio, creo que si no consigo una placa base barata lo que haré será venderlo por piezas. Esto ha sido un fracaso absoluto, con una serie de catástrofes inexplicables (¿borrarse el IMEI al actualizar una ROM? ¿no poder corregir ese IMEI? ¿borrarse el bootloader o algo similar de forma espontánea?) y ni Xiaomi ni Qualcomm han ayudado mucho. Como uno ya tiene una edad y eso le da el derecho humano a tener mas manías.... a partir de ahora Xiaomi y Qualcomm:


Vamos a disfrutar de la vida, que sin gobierno se vive muy bien y hasta nos perdonan la desviación del déficit nuestros amigos de la UE para no humillarnos. Estos imbéciles se piensan que yo soy tonto...

No hay comentarios:

Publicar un comentario