Usar o DebugFS no Android 12

Os dispositivos lançados com o Android 12 usando versões do kernel mais recentes que a v5.4 precisam ser enviados com o kernel do GKI. Para que os parceiros possam acessar DebugFS em builds de userdebug durante o desenvolvimento no kernel do GKI, a configuração do kernel CONFIG_DEBUG_FS é ativada no defconfig do GKI. Nunca monte DebugFS em builds de usuário para dispositivos lançados no Android 12.

Os builds do userdebug têm uma cobertura de teste melhor do que os builds do usuário e são testados extensivamente durante o ciclo de desenvolvimento. O plano a seguir minimiza a diferença entre os dois tipos de build em relação ao acesso DebugFS e oferece estes benefícios:

  • Evita que builds de userdebug dependam acidentalmente de DebugFS para novas funcionalidades.
  • Garante que qualquer funcionalidade existente que seja interrompida pela falta do DebugFS seja conhecida no início do ciclo de desenvolvimento

Os acessos de DebugFS em builds de userdebug são categorizados da seguinte forma:

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

A tabela a seguir descreve como cada uma dessas três categorias tem suporte no Android 12. O seguinte só se aplica a builds userdebug, já que DebugFS não pode ser montado em builds do usuário.

Caso de uso Build userdebug do Android 12
Inicialização única de arquivos DebugFS durante a inicialização. Esse acesso acontece apenas uma vez durante a inicialização. O HAL Dumpstate executa isso durante a inicialização do HAL. Para ativar isso, init monta DebugFS em builds de userdebug antes que o HAL seja inicializado. Init chama umount() em DebugFS quando a inicialização do dispositivo é concluída.
Geração de relatórios de bugs: o HAL de dumpstate lê arquivos DebugFS, que se tornam parte do relatório de bugs. Feito por dumpstate HAL em DumpstateBoard() quando invocado por dumpstate (DumpstateDevice.cpp). A ferramenta dumpstate (parte do framework do Android) garante que o DebugFS seja montado durante a invocação.
Testes e validação específicos do dispositivo Raiz e shell do adb. Monte DebugFS no shell do adb com acesso raiz1.

1Para montar DebugFS em adb shell com acesso raiz, use este comando:

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

Ações necessárias do parceiro

Os parceiros precisam implementar o seguinte com base nessas mudanças nos dispositivos Android 12:

  • Fazer com que todas as inicializações de tempo de inicialização de nós DebugFS ocorram durante a inicialização do HAL de dumpstate. Para conferir um exemplo de como fazer isso, consulte DNM: Example for boot time initialization of DebugFS files.
  • Não permita o acesso a DebugFS durante a execução. As seguintes exceções se aplicam:
    • Geração de relatórios de bugs (vem do HAL de dumpstate)
    • Teste e validação (acessível por adb root e shell - verifique se o DebugFS foi montado primeiro)

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

Os testes de compliance do GTS garantem que o sistema de arquivos DebugFS não seja montado em builds do usuário. As declarações neverallow da Sepolicy garantem que, em dispositivos que são iniciados no Android 12 ou mais recente, processos não autorizados não tenham acesso a DebugFs.