Usando o DebugFS no Android 12

Os dispositivos iniciados com Android 12 usando versões de kernel superiores à v5.4 precisam ser fornecidos com o kernel GKI. Para que os parceiros possam acessar DebugFS em compilações userdebug enquanto desenvolvem no kernel GKI, a configuração do kernel CONFIG_DEBUG_FS é habilitada no defconfig do GKI. Nunca monte DebugFS em compilações de usuário para dispositivos lançados no Android 12.

As compilações do Userdebug têm melhor cobertura de teste do que as compilações do usuário e são fortemente testadas durante todo o ciclo de desenvolvimento. O plano a seguir minimiza a diferença entre os dois tipos de compilação em relação ao acesso DebugFS e fornece estes benefícios:

  • Impede que compilações userdebug dependam acidentalmente do DebugFS para novas funcionalidades
  • Garante que qualquer funcionalidade existente quebrada pela falta do DebugFS seja conhecida no início do ciclo de desenvolvimento

Os acessos Debugfs em compilações userdebug são categorizados da seguinte forma:

  1. Inicializações de arquivo DebugFS durante a inicialização do dispositivo, como acesso de gravação a um arquivo no DebugFS para ativar a coleta de dados de depuração.
  2. Geração de bugreport: O dumpstate HAL lê arquivos DebugFS quando DumpstateBoard() é invocado por dumpstate . Esta informação passa a fazer parte do relatório de bug.
  3. Teste e validação específicos do dispositivo.

A tabela a seguir descreve como cada uma dessas três categorias é compatível com o Android 12. Observe que o seguinte se aplica apenas a compilações de userdebug, já que DebugFS não pode ser montado em compilações de usuário.

Caso de uso Compilação de depuração de usuário do Android 12
Inicialização única de arquivos DebugFS , durante a inicialização . Esse acesso acontece apenas uma vez durante a inicialização. Dumpstate HAL executa isso durante a inicialização do HAL. Para habilitar o mesmo, o init monta DebugFS em compilações userdebug antes da inicialização do HAL. Init chama umount() no DebugFS quando o dispositivo conclui a inicialização.
Geração de bugreport : O dumpstate HAL lê arquivos DebugFS , que se tornam parte do relatório de bug. Feito por dumpstate HAL dentro DumpstateBoard() quando invocado por dumpstate ( DumpstateDevice.cpp ). A ferramenta dumpstate (parte da estrutura Android) garante que DebugFS seja montado durante a invocação.
Teste e validação específicos do dispositivo Raiz e shell do Adb. Monte DebugFS a partir do shell adb com acesso root 1 .

1 Para montar DebugFS a partir adb shell com acesso root, use este comando:

adb shell mount -t debugfs debugfs /sys/kernel/debug .

Ações obrigatórias do parceiro

Os parceiros precisam aprovar o seguinte com base nessas alterações nos dispositivos Android 12:

  • Faça com que todas as inicializações de tempo de inicialização dos nós DebugFS aconteçam durante a inicialização do dumpstate HAL. Para obter um exemplo de como fazer isso, consulte DNM: Exemplo de inicialização de arquivos DebugFS no tempo de inicialização .
  • Não permita acesso DebugFS durante o tempo de execução. As seguintes exceções se aplicam:
    • Geração de bugreport (vem do dumpstate HAL)
    • Teste e validação (acessível por adb root e shell - certifique-se de que o DebugFS seja montado primeiro)

Os desenvolvedores podem definir a propriedade persistente de depuração persist.dbg.keep_debugfs_mounted para manter DebugFs montados durante reinicializações em compilações userdebug e eng.

Os testes de conformidade do GTS garantem que o sistema de arquivos DebugFS não seja montado nas compilações do usuário. As declarações neverallow da Sepolicy garantem que, em dispositivos lançados no Android 12 ou superior, processos não autorizados não tenham acesso a DebugFs .