Cómo hacer DIY Port TWRP para Android

, puede intentar trabajar con un árbol más pequeño, como este TWRP manifiesto mínimo . Sin embargo, puede haber situaciones en las que necesite más repositorios de los que permite este manifiesto.



Nota importante antes de compilar: si agrega o cambia alguna bandera, deberá limpiar (o hacer clobber) antes de volver a compilar; de lo contrario, los cambios de su bandera no se incluirán.

Una vez que tenga el código fuente de TWRP, debemos cambiar algunas de las marcas de compilación para su dispositivo específico. Busque BoardConfig.mk para su dispositivo; normalmente se encontrará en dispositivos / fabricante / nombre en clave (por ejemplo, dispositivos / lge / hammerhead / BoardConfig.mk)



La configuración de la placa debe incluir la configuración de la arquitectura y la plataforma, que normalmente ya están incluidas Si estás usando la configuración del dispositivo de otra persona. Pero si creó los suyos propios, deberá agregarlos. Esto se debe a que sin ellos, el arranque de recuperación puede fallar y simplemente mostrará el logotipo de TeamWin en su pantalla repetidamente.



Las banderas deben colocarse en la parte inferior de BoardConfig.mk, bajo un título de #twrp



por todas dispositivos, debe indicar a TWRP qué tema usar. La bandera TW_THEME se usa en lugar de la bandera DEVICE_RESOLUTION anterior, lo que significa que TWRP ahora usa escalado para estirar cualquier tema.

Sus opciones son: portrait_hdpi, portrait_mdpi, landscape_hdpi, landscape_mdpi y watch_mdpi. Para el modo vertical, lo más probable es que desee el tema hdpi de 720 × 1280 y superior, pero para los dispositivos de paisaje, elija 1280 × 720 y superior.

Entonces, su sección de bandera de compilación + bandera de tema debería verse así:



#twrp

TW_THEME: = retrato_hdpi

Algunas marcas de compilación adicionales que querrá incluir en esta sección (créditos a los foros de XDA):

  • RECOVERY_SDCARD_ON_DATA: = true (esto permite el manejo adecuado de / data / media en dispositivos que tienen esta carpeta para almacenamiento (la mayoría de Honeycomb y dispositivos que originalmente se enviaron con ICS como Galaxy Nexus) Sin embargo, esta marca no es necesaria para este tipo de dispositivos. no defina esta marca y tampoco incluya ninguna referencia a / sdcard, / internal_sd, / internal_sdcard o / emmc en su fstab, entonces asumiremos automáticamente que el dispositivo está usando almacenamiento emulado).
  • BOARD_HAS_NO_REAL_SDCARD: = true - deshabilita cosas como la partición de la tarjeta SD y puede ahorrarle algo de espacio si TWRP no encaja en su patición de recuperación
  • TW_NO_BATT_PERCENT: = true: desactiva la visualización del porcentaje de batería para dispositivos que no lo admiten correctamente
  • TW_CUSTOM_POWER_BUTTON: = 107 - mapas personalizados del botón de encendido para la pantalla de bloqueo
  • TW_NO_REBOOT_BOOTLOADER: = true - elimina el botón de reinicio del cargador de arranque del menú de reinicio
  • TW_NO_REBOOT_RECOVERY: = true - elimina el botón de recuperación de reinicio del menú de reinicio
  • RECOVERY_TOUCHSCREEN_SWAP_XY: = true - intercambia la asignación de toques entre los ejes X e Y
  • RECOVERY_TOUCHSCREEN_FLIP_Y: = true - voltea los valores de la pantalla táctil del eje y
  • RECOVERY_TOUCHSCREEN_FLIP_X: = true - voltea los valores de la pantalla táctil del eje x
  • TWRP_EVENT_LOGGING: = true: habilita el registro de eventos táctiles para ayudar a depurar los problemas de la pantalla táctil (no deje esto encendido para una publicación; llenará su archivo de registro muy rápidamente)
  • BOARD_HAS_FLIPPED_SCREEN: = true - voltea la pantalla al revés para las pantallas que se montaron al revés

Se pueden encontrar indicadores de compilación adicionales al hojear los archivos Android.mk en la fuente de recuperación, pero generalmente no se usan, por lo que no tiene sentido documentarlos.

Usando Recovery.Fstab

  TWRP 2.5 y superior tiene soporte para nuevas funciones recovery.fstab, en particular la capacidad de extender las funciones de copia de seguridad / restauración de TWRP. No es necesario agregar indicadores fstab, porque la mayoría de las particiones se manejarán automáticamente.

TWRP solo admite fstabs v2 en la versión 3.2.0 y superior; en versiones anteriores de TWRP, deberá utilizar el formato anterior de fstab. Aquí hay un ejemplo de TWRP fstab para un Galaxy S4:

Para maximizar la compatibilidad con su árbol de compilación particular, puede crear un twrp.fstab y usar PRODUCT_COPY_FILES para colocar en> etc> twrp.fstab.

Cuando TWRP se inicia y encuentra twrp.fstab en el ramdisk, le cambiará el nombre a> etc> recovery.fstab.bak - básicamente reemplaza el fstab de su dispositivo con el TWRP fstab, que extiende la compatibilidad.

Código de ejemplo:

PRODUCT_COPY_FILES + = dispositivo / lge / hammerhead / twrp.fstab: recuperación> raíz> etc> twrp.fstab

El fstab en TWRP puede contener algunas 'banderas' para cada partición listada en el fstab.

Estas banderas se agregan hasta el final de la lista de particiones en el fstab, separados por espacios en blanco / espacios / pestañas. La bandera solo afectará a esa partición, pero no a otras. Las banderas están separadas por punto y coma. Aquí hay un código de ejemplo:

Así que examinemos esto poco a poco. La bandera aquí le dará un nombre para mostrar de 'Tarjeta Micro SD'. La bandera wipeingui hará que esta partición esté disponible para limpiar en el menú de limpieza avanzada. La bandera extraíble indica que esta partición no siempre está presente, lo que evitará que se muestren errores de montaje.

Una lista completa de banderas (créditos a TeamWin) :

  • retirable - indica que la partición puede no estar presente evitando que se muestren errores de montaje durante el arranque
  • almacenamiento - indica que la partición se puede usar como almacenamiento, lo que hace que la partición esté disponible como almacenamiento para respaldo, restauración, instalaciones zip, etc.
  • almacenamiento - solo se debe establecer una partición como almacenamiento de configuración, esta partición se utiliza como la ubicación para almacenar el archivo de configuración de TWRP
  • canbewped - indica que el sistema de back-end puede borrar la partición, pero es posible que el usuario no la incluya en la GUI
  • userrmrf - anula el tipo de formato normal de borrado y solo permite borrar la partición usando el comando rm -rf
  • backup = - debe ir precedido del signo igual, por lo que backup = 1 o backup = 0, 1 indica que la partición se puede incluir en la lista de copia de seguridad / restauración, mientras que 0 asegura que esta partición no aparecerá en la lista de copia de seguridad.
  • wipeingui - hace que la partición se muestre en la GUI para permitir que el usuario la seleccione para borrar en el menú de borrado avanzado
  • borrado durante el reinicio de fábrica - la partición se borrará durante un restablecimiento de fábrica
  • ignorar - blkid se usa para determinar qué sistema de archivos está usando TWRP, este indicador hará que TWRP omita / ignore los resultados de blkid y use el sistema de archivos especificado en el fstab solamente
  • retener la versión - hace que TWRP retenga el archivo .layoutversion en / data en dispositivos como Sony Xperia S que usa / data / media pero aún tiene una partición / sdcard separada
  • enlace simbólico = - hace que TWRP ejecute un comando de montaje adicional al montar la partición, generalmente se usa con / data / media para crear / sdcard
  • monitor = - establece un nombre de visualización para la partición para su listado en la GUI
  • nombre de almacenamiento = - establece un nombre de almacenamiento para la partición para su inclusión en la lista de almacenamiento de la GUI
  • nombre de respaldo = - establece un nombre de copia de seguridad para la partición para su inclusión en la lista de copia de seguridad / restauración de la GUI
    length = - generalmente se usa para reservar espacio vacío al final de la partición / data para almacenar la clave de descifrado cuando está presente el cifrado completo del dispositivo de Android, no configurar esto puede conducir a la incapacidad de cifrar el dispositivo
  • copia de seguridad = - 1 o 0 para habilitar / deshabilitar, hace que TWRP encripte la copia de seguridad de esta partición si el usuario elige la encriptación (solo se aplica a las copias de seguridad de tar, no a las imágenes)
  • userdataencryptbackup = - 1 o 0 para habilitar / deshabilitar, hace que TWRP encripte solo la porción de datos de usuario de esta partición, ciertos subfuldes como / data / app no ​​se encriptarían para ahorrar tiempo
  • subpartición de = - debe ir seguido del signo igual y la ruta de la partición de la que es una subpartición. Una subpartición se trata como 'parte' de la partición principal, por lo que, por ejemplo, TWRP convierte automáticamente / datadata en una subpartición de / data. Esto significa que / datadata no aparecerá en las listas de la GUI, pero / datadata se borrará, respaldará, restaurará, montará y desmontará cada vez que se realicen esas operaciones en / data.

Un buen ejemplo del uso de subparticiones son las particiones 3x efs en el LG Optimus G:

Esto agrupa las 3 particiones en una sola entrada 'EFS' en la GUI de TWRP, lo que permite realizar copias de seguridad de las tres y restaurarlas juntas en una sola entrada.

Con TWRP 3.2.0 y superior, que usa V2 Fstab, no es necesario agregar ninguna marca de compilación . El soporte de V2 Fstab es automático. V2 Fstab también admite comodines (el símbolo *) que pueden ser útiles para tarjetas USB OTG y micro-SD con múltiples particiones. También puede seguir utilizando el formato Fstab V1, y es totalmente posible utilizar los tipos V1 y V2 en la misma Fstab.

Por ejemplo, aquí hay una línea V1 Fstab con un comodín destinado a un USB OTG:

Aquí hay una línea V2 Fstab para el mismo dispositivo que logra el mismo resultado:

Además, puede incluir etc twrp.flags que usan el formato V1 Fstab, y se pueden usar para complementar la V2 Fstab con indicadores TWRP, particiones adicionales no incluidas en V2 Fstab o configuraciones anuladas en V2 Fstab.

Por ejemplo, un dispositivo Huawei podría tener este fstab V2 en etc recovery.fstab:

También puede tener estas banderas incluidas:

Así que aquí, las dos primeras líneas en TWRP.Flags agregarán las particiones Boot y Recovery, que no estaban presentes en la Fstab V2. Luego, la línea / cust en TWRP.flags indicará a TWRP que permita al usuario final hacer una copia de seguridad de la partición (cust) y darle un nombre para mostrar.

La partición / misc está presente en twrp.flags, y la partición / oeminfo indica a TWRP que también permita realizar copias de seguridad y darle un nombre para mostrar.

Necesitamos la línea / data porque muchos dispositivos Huawei están encriptados, pero usan binarios especiales de Huawei; por lo tanto, usamos los binarios de Huawei para desencriptar el dispositivo automáticamente en el modo de recuperación. Así que aquí la línea / data le indicará a TWRP que use / dev / block / dm -0, y no / dev / block / bootdevice / by-name / userdata, que normalmente se usa para el montaje 'adecuado'.

Finalmente está / system_image, por lo que TWRP incluirá una opción para crear una imagen del sistema en los menús Backup y Restore.

El github oficial de TeamWin también debe contener los últimos ejemplos de árboles de dispositivos para dispositivos que tienen un puerto TWRP oficial. Se puede encontrar el github de TeamWin AQUÍ .

Una vez que Omni o CM se hayan sincronizado y hayas configurado tus indicadores TWRP, debes crear una fuente ./build/envsetup.sh

Y querrá 'almorzar' el dispositivo, para poder hacer algo como 'almorzar omni_hammerhead.eng'.

Después de un almuerzo exitoso, la mayoría de los dispositivos usarán este comando:

Debe reemplazar el # en –j # con el recuento de núcleos +1. Entonces, si tiene un núcleo dual es –j3, un núcleo cuádruple será –j5, etc. Reemplace el # con el número de núcleos +1, por lo que si tiene un núcleo dual es -j3 y un núcleo cuádruple se convierte en -j5, etc.

Además, los dispositivos típicos de Samsung requerirán esto:

Esto se debe a que la mayoría de los dispositivos Samsung incluyen la recuperación como un ramdisk extra en el maletero, en lugar de en una partición de recuperación separada (que utilizan la mayoría de los otros dispositivos).

A estas alturas, debería tener TWRP compilado para su dispositivo y, con suerte, funcionará en un entorno de emulador. Siempre debe probar primero su puerto TWRP en un entorno de emulador, para no correr el riesgo de estropear su dispositivo.
Descargue este conjunto de archivos de configuración de dispositivos.

Compile una imagen de recuperación utilizando esos archivos de dispositivo. En el SDK de Android, haga clic en Herramientas -> Administrar AVD. Haga clic en Nuevo. Configúrelo de la siguiente manera:

Luego haga clic en Aceptar.

Una vez que tenga su AVD y su imagen de recuperación, puede iniciar TWRP en el emulador navegando a su carpeta android-sdk / tools y ejecute este comando:

Tenga en cuenta que ADB no funciona de inmediato. Aproximadamente de 10 a 15 segundos después de que TWRP termine de iniciarse, ADB se conectará. Comenzamos ADB a través de init.rc, por lo que incluso si TWRP no se inicia debido a algún tipo de error de código que puede haber cometido, ADB aún debería funcionar. ¡Disfrutar!

Dispositivos TWRP y A / B (créditos a TeamWin):

Desde el punto de vista de TWRP, los dispositivos A / B no son muy diferentes de los dispositivos normales, pero los desarrolladores parecen tener vergüenza de trabajar en estos dispositivos. Voy a tratar de arrojar algo de luz sobre este tema y, con suerte, esto servirá como guía para transferir TWRP a dispositivos A / B.

En primer lugar, comprendamos qué es un dispositivo A / B y en qué se diferencia. Los dispositivos A / B tienen duplicados de muchas particiones en el dispositivo. Un dispositivo A / B tiene 2x particiones del sistema, 2x particiones de arranque, 2x particiones de proveedor, 2x particiones de módem / firmware, etc. Solo se usa una ranura a la vez. Durante el arranque temprano, las primeras etapas del cargador de arranque leen una pequeña cantidad de datos llamada BCB o Bloque de control del cargador de arranque y deciden si arrancar las particiones A o las particiones B. Cuando hay una actualización OTA disponible, los datos de la ranura activa se copian de la ranura inactiva y se parchean / actualizan. Por ejemplo, si se encuentra actualmente en la ranura A, su dispositivo descargaría la actualización y copiaría la partición del sistema existente de la ranura A y la parchearía / actualizaría con las nuevas actualizaciones en la ranura B. Una vez que se complete la copia y actualización, el BCB se actualiza y el dispositivo se reinicia usando la ranura B. La próxima vez que haya una actualización disponible, la partición del sistema en la ranura B se copia en la ranura A y se actualiza, el BCB se actualiza y reiniciamos en la ranura A. Al ver las particiones en el dispositivo, verás algo como esto:

Tenga en cuenta las particiones de arranque dual, sistema y proveedor en la lista anterior, pero solo una partición de datos de usuario.

Si bien técnicamente no existe ningún requisito que yo sepa, todos los dispositivos A / B enviados hasta ahora no tienen una partición de recuperación separada. En cambio, la imagen de arranque contiene la recuperación en su disco RAM. Lo importante es saber que la imagen de arranque ahora también contiene la recuperación. Para completar, la partición del sistema es un sistema de archivos raíz completo. Durante el arranque, si se le dice al kernel que arranque para la recuperación, extraerá el disco RAM en la partición de arranque. Si el gestor de arranque no le dice al kernel que arranque para la recuperación, entonces el kernel montará la partición del sistema adecuada (A o B) porque la partición del sistema es un sistema de archivos raíz completo. Esto significa que la partición del sistema en estos dispositivos está montada en / en lugar de en / system y la partición del sistema contiene todos los archivos que normalmente habrían estado en el disco ram de la imagen de arranque y una subcarpeta / system.

Desde el punto de vista de TWRP, hay 3 cosas que debe hacer para un dispositivo A / B. Primero, necesitas configurar

Código:

Por último, una vez que ingrese a TWRP, probablemente querrá asegurarse de que bootctl hal-info responda correctamente sin errores. Por lo general, el binario bootctl requiere una biblioteca propietaria o incluso un par de servicios para funcionar correctamente. Si bootctl no funciona correctamente, tampoco podrá cambiar las ranuras dentro de TWRP correctamente.

Además de establecer

Código:

AB_OTA_UPDATER: = verdadero

es posible que también desee configurar:

Código:

BOARD_USES_RECOVERY_AS_BOOT: = verdadero

BOARD_BUILD_SYSTEM_ROOT_IMAGE: = verdadero

Si pones

Código:

BOARD_USES_RECOVERY_AS_BOOT: = verdadero

entonces make recoveryimage ya no funcionará y en su lugar tendrás que hacer bootimage. No recomiendo configurar ninguno de estos indicadores para árboles de compilación solo de TWRP. Estos indicadores probablemente serán necesarios para los desarrolladores que creen ROM completas para dispositivos A / B.

Instalación / flasheo de TWRP en dispositivos A / B:

Dado que todos los dispositivos A / B conocidos no tienen una partición de recuperación separada, eventualmente tendrá que actualizar TWRP en la partición de arranque. En Pixel 1 y 2, usamos el arranque rápido para iniciar TWRP temporalmente sin flashear TWRP. Luego, estamos proporcionando un zip para permitir a los usuarios actualizar TWRP en ambas ranuras. Puede descargar una de estas cremalleras de nuestro sitio web y actualizarla según sea necesario para admitir sus dispositivos. Finalmente, agregaremos herramientas a TWRP para permitir a los usuarios actualizar las recuperaciones en estos dispositivos sin necesidad de usar cremalleras.

Recientemente, trabajé en el Razer Phone. Desafortunadamente, el teléfono Razer no es compatible con el arranque rápido. En su lugar, los usuarios deben determinar su ranura de inicio actualmente activa utilizando

Código:

para entrar en TWRP. Una vez en TWRP, pueden ir a la página de reinicio y volver a su ranura originalmente activa, hacer una copia de seguridad y luego instalar TWRP. El uso de la ranura inactiva permite a los usuarios obtener una copia de seguridad buena y sin modificaciones de su dispositivo antes de instalar TWRP.

Notas adicionales:

Si desea obtener TWRP oficialmente compatible con su dispositivo para que pueda instalarse automáticamente con la aplicación TWRP, y realmente desea hacer esto para que otros propietarios del mismo dispositivo puedan disfrutar del soporte oficial TWRP y es lo mejor que puede hacer, deberá enviar la siguiente información a TeamWin:

  1. Archivos de configuración de dispositivos para compilar TWRP desde la fuente para tu dispositivono reempaque un recovery.img a mano , necesitan compilarlo desde la fuente.
  2. Después de que TeamWin cree una copia de TWRP, se la enviarán para su validación; una vez que la haya validado, TeamWin creará una imagen funcional para su dispositivo y la agregará a la aplicación oficial de TWRP.
13 minutos de lectura