Desarrollo de dispositivos personalizado

En esta página, se explican las diferentes tareas que podrías tener que realizar si estás configurando una compilación para tu propio dispositivo.

Crea una configuración flash personalizada

Las instrucciones de fastboot se definen en un artefacto llamado fastboot-info.txt. Si compilas varios destinos, tendrás varios archivos fastboot-info.txt en $OUT_DIR. Y, $ANDROID_PRODUCT_OUT apunta al destino más reciente que compilaste. En esta página, se enumeran las tareas para que fastboot ejecute y se puedan regenerar con m fastboot_info. Puedes modificar el archivo fastboot-info.txt para introducir lógica de escritura personalizada en la memoria flash.

El archivo fastboot-info.txt admite estos comandos:

  • flash %s: Escribe en la memoria flash de una partición determinada. Los argumentos opcionales incluyen --slot-other,filename_path, and--apply-vbmeta`.
  • update-super: Actualiza la partición super.
  • if-wipe: Ejecuta condicionalmente algún otro componente si se especifica una limpieza.
  • erase %s: Borra una partición determinada (solo se puede usar junto con if-wipe -> p. ej., if-wipe erase cache).

Determina el estado de bloqueo de escritura en la memoria flash

Si vas a compilar un daemon de flashboot personalizado (flashbootd) para un dispositivo, necesitas poder obtener el bootloader y el estado de bloqueo del bootloader. getFlashLockState() @SystemApi transmite el estado del bootloader y la API del sistema PersistentDataBlockManager.getFlashLockState() devuelve el estado de bloqueo del bootloader en dispositivos compatibles.

Valor que se devuelve Condiciones
FLASH_LOCK_UNKNOWN Solo lo devuelven los dispositivos que se actualizaron a Android 7.x o versiones posteriores que no admitían cambios de bootloader necesarios para obtener el estado de bloqueo de la escritura en la memoria flash si admitían la función de bloqueo/desbloqueo de la escritura en la memoria flash.
  • Los dispositivos nuevos con Android 7.x o versiones posteriores deben estar en estado FLASH_LOCK_LOCKED o FLASH_LOCK_UNLOCKED.
  • Los dispositivos que se actualicen a Android 7.x o una versión posterior que no admitan la función de bloqueo/desbloqueo de escritura en la memoria flash deben devolver el estado FLASH_LOCK_LOCKED.
FLASH_LOCK_LOCKED Lo devuelve cualquier dispositivo que no admite bloqueo/desbloqueo de escritura en la memoria flash (es decir, el dispositivo siempre está bloqueado), o cualquier dispositivo que admite bloqueo/desbloqueo de escritura en la memoria flash y está en estado bloqueado.
FLASH_LOCK_UNLOCKED Lo devuelve cualquier dispositivo que admite bloqueo/desbloqueo de escritura en la memoria flash y está en estado desbloqueado.

Los fabricantes deben someter a prueba los valores que muestran los dispositivos con bootloaders bloqueados y desbloqueados. Por ejemplo, el AOSP contiene una implementación de referencia que devuelve un valor basado en la propiedad de inicio ro.boot.flash.locked. El código de ejemplo se encuentra en los siguientes directorios:

  • frameworks/base/services/core/java/com/android/server/PersistentDataBlockService.java
  • frameworks/base/core/java/android/service/persistentdata/PersistentDataBlockManager.java