Desenvolvimento de dispositivos personalizados

Esta página explica diversas tarefas que você pode precisar executar se estiver configurando uma compilação para seu próprio dispositivo.

Crie uma configuração flash personalizada

As instruções do Fastboot são definidas em um artefato chamado fastboot-info.txt . Se você criar vários destinos, terá vários arquivos fastboot-info.txt no $OUT_DIR . E $ANDROID_PRODUCT_OUT aponta para o alvo mais atual que você construiu. Esta página lista as tarefas para execução do fastboot e pode ser regenerada usando m fastboot_info . Você pode introduzir uma lógica de flash personalizada modificando o arquivo fastboot-info.txt .

O arquivo fastboot-info.txt suporta estes comandos:

  • flash %s : Pisca uma determinada partição. Argumentos opcionais incluem --slot-other, filename_path , and --apply-vbmeta`.
  • update-super : Atualiza a superpartição.
  • if-wipe : Executa condicionalmente algum outro componente se uma limpeza for especificada.
  • erase %s : Apaga uma determinada partição (só pode ser usado em conjunto com if-wipe -> por exemplo, if-wipe erase cache ).

Determinar o estado de bloqueio do flash

Se você estiver construindo um daemon flashboot personalizado (flashbootd) para um dispositivo, você precisará obter o bootloader e o estado de bloqueio do bootloader. O getFlashLockState() @SystemApi transmite o estado do bootloader e a API do sistema PersistentDataBlockManager.getFlashLockState() retorna o status de bloqueio do bootloader em dispositivos compatíveis.

Valor de retorno Condições
FLASH_LOCK_UNKNOWN Retornado apenas por dispositivos atualizados para o Android 7.x ou superior que não eram compatíveis anteriormente com as alterações do carregador de inicialização necessárias para obter o status de bloqueio de flash se eles suportassem o recurso de bloqueio/desbloqueio de flash.
  • Novos dispositivos com Android 7.x ou superior devem estar no estado FLASH_LOCK_LOCKED ou FLASH_LOCK_UNLOCKED .
  • Dispositivos atualizados para Android 7.x ou superior que não suportam o recurso de desbloqueio/bloqueio intermitente devem retornar um estado FLASH_LOCK_LOCKED .
FLASH_LOCK_LOCKED Retornado por qualquer dispositivo que não suporte bloqueio/desbloqueio intermitente (ou seja, o dispositivo está sempre bloqueado) ou qualquer dispositivo que suporte bloqueio/desbloqueio intermitente e esteja no estado bloqueado.
FLASH_LOCK_UNLOCKED Retornado por qualquer dispositivo que suporte bloqueio/desbloqueio intermitente e esteja no estado desbloqueado.

Os fabricantes devem testar os valores retornados pelos dispositivos com bootloaders bloqueados e desbloqueados. Por exemplo, AOSP contém uma implementação de referência que retorna um valor baseado na propriedade de inicialização ro.boot.flash.locked . O código de exemplo está localizado nos seguintes diretórios:

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