Usando DebugFS en Android 12

Los dispositivos que se inician con Android 12 y utilizan versiones de kernel superiores a la v5.4 deben enviarse con el kernel GKI. Para que los socios puedan acceder DebugFS en compilaciones de depuración de usuario mientras desarrollan en el kernel de GKI, la configuración del kernel CONFIG_DEBUG_FS está habilitada en GKI defconfig. Nunca monte DebugFS en compilaciones de usuarios para dispositivos que se inician con Android 12.

Las compilaciones de Userdebug tienen una mejor cobertura de prueba que las compilaciones de usuarios y se prueban exhaustivamente durante todo el ciclo de desarrollo. El siguiente plan minimiza la diferencia entre los dos tipos de compilación con respecto al acceso DebugFS y proporciona estos beneficios:

  • Evita que las compilaciones de userdebug dependan accidentalmente de DebugFS para obtener nuevas funciones
  • Garantiza que cualquier funcionalidad existente que esté interrumpida por la falta de DebugFS se conozca al principio del ciclo de desarrollo.

Los accesos a Debugfs en compilaciones de userdebug se clasifican de la siguiente manera:

  1. Inicializaciones de archivos DebugFS durante el arranque del dispositivo, como un acceso de escritura a un archivo en DebugFS para activar la recopilación de datos de depuración.
  2. Generación de informes de errores: dumpstate HAL lee archivos DebugFS cuando dumpstate invoca DumpstateBoard() . Esta información pasa a formar parte del informe de error.
  3. Pruebas y validación específicas del dispositivo.

La siguiente tabla describe cómo se admite cada una de estas tres categorías en Android 12. Tenga en cuenta que lo siguiente solo se aplica a las compilaciones de usuario, ya que DebugFS no se puede montar en compilaciones de usuario.

Caso de uso Compilación de depuración de usuario de Android 12
Inicialización única de archivos DebugFS , durante el inicio . Este acceso ocurre sólo una vez durante el arranque. Dumpstate HAL realiza esto durante la inicialización de HAL. Para habilitar lo mismo, init monta DebugFS en compilaciones de userdebug antes de que se inicialice HAL. Init llama umount() en DebugFS cuando el dispositivo ha completado el inicio.
Generación de informes de errores : el HAL dumpstate lee los archivos DebugFS , que pasan a formar parte del informe de errores. Realizado por dumpstate HAL dentro de DumpstateBoard() cuando lo invoca dumpstate ( DumpstateDevice.cpp ). La herramienta dumpstate (parte del marco de Android) garantiza que DebugFS se monte durante la invocación.
Pruebas y validación específicas del dispositivo Raíz y shell de Adb. Monte DebugFS desde adb shell con acceso de root 1 .

1 Para montar DebugFS desde adb shell con acceso root, use este comando:

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

Acciones requeridas del socio

Los socios deben implementar lo siguiente según estos cambios en los dispositivos con Android 12:

  • Haga que todas las inicializaciones de tiempo de arranque de los nodos DebugFS ocurran durante la inicialización de HAL del estado de volcado. Para ver un ejemplo de cómo hacer esto, consulte DNM: Ejemplo de inicialización en tiempo de arranque de archivos DebugFS .
  • No permita el acceso DebugFS durante el tiempo de ejecución. Se aplican las siguientes excepciones:
    • Generación de informes de errores (proviene del estado de volcado HAL)
    • Pruebas y validación (accesibles mediante adb root y shell ; asegúrese de que DebugFS esté montado primero)

Los desarrolladores pueden configurar la propiedad persistente de depuración persist.dbg.keep_debugfs_mounted para mantener DebugFs montado durante los reinicios en las compilaciones userdebug y eng.

Las pruebas de cumplimiento de GTS garantizan que el sistema de archivos DebugFS no esté montado en compilaciones de usuarios. Las declaraciones neverallow de Sepolicy garantizan que en los dispositivos que se inician con Android 12 o superior, los procesos no autorizados no tengan acceso a DebugFs .