Usando o DebugFS no Android 12

Os dispositivos iniciados com o Android 12 usando versões de kernel superiores a v5.4 precisam ser enviados com o kernel GKI. Para que os parceiros possam acessar DebugFS em builds userdebug enquanto desenvolvem no kernel GKI, a configuração do kernel CONFIG_DEBUG_FS é habilitada no defconfig do GKI. Nunca monte o DebugFS nas compilações do usuário para dispositivos iniciados 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 ao DebugFS e oferece esses benefícios:

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

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

  1. Inicializações do arquivo DebugFS durante a inicialização do dispositivo, como um acesso de gravação a um arquivo no DebugFS para ativar a coleta de dados de depuração.
  2. Geração de relatório de bug: O dumpstate HAL lê arquivos DebugFS quando DumpstateBoard() é invocado por dumpstate . Esta informação torna-se 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, pois DebugFS não pode ser montado em compilações de usuário.

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

1 Para montar DebugFS do 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 devem 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 tempo de inicialização de arquivos DebugFS .
  • Não permita o acesso ao 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 montado nas reinicializações em builds userdebug e eng.

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