Usando DebugFS en Android 12

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

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

  • Evita que las compilaciones de depuración de usuarios dependan accidentalmente de DebugFS para una nueva funcionalidad
  • Garantiza que cualquier funcionalidad existente que se rompa por la falta de DebugFS se conozca al principio del ciclo de desarrollo.

Los accesos de debugfs en compilaciones de depuración de usuario 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 DumpstateBoard() es invocado por dumpstate . Esta información se convierte en parte del informe de errores.
  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 depuración de usuarios, ya que DebugFS no se puede montar en las compilaciones de usuarios.

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 solo una vez durante el tiempo de arranque. Dumpstate HAL realiza esto durante la inicialización de HAL. Para habilitar lo mismo, init monta DebugFS en compilaciones de depuración de usuario antes de que se inicialice HAL. Init llama a umount() en DebugFS cuando el dispositivo ha terminado de iniciarse.
Generación de informes de errores: el dumpstate HAL lee los archivos DebugFS , que pasan a formar parte del informe de errores. Realizado por dumpstate HAL dentro de DumpstateBoard() cuando es invocado por dumpstate ( DumpstateDevice.cpp ). La herramienta dumpstate (parte del marco de trabajo de Android) garantiza que DebugFS monte durante la invocación.
Pruebas y validación específicas del dispositivo Adb root y shell. Monte DebugFS desde el shell de adb con acceso de root 1 .

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

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

Acciones de socios requeridas

Los socios deben promulgar lo siguiente en función de estos cambios en los dispositivos con Android 12:

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

Los desarrolladores pueden establecer la propiedad persistente de depuración persist.dbg.keep_debugfs_mounted para mantener DebugFs montados durante los reinicios en compilaciones de usuario y de ingeniería.

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