Utilizzare DebugFS in Android 12

I dispositivi lanciati con Android 12 che utilizzano versioni del kernel superiori alla v5.4 devono essere forniti con il kernel GKI. Affinché i partner possano accedere a DebugFS nelle build userdebug durante lo sviluppo sul kernel GKI, la configurazione del kernel CONFIG_DEBUG_FS è attivata nel defconfig GKI. Non montare mai DebugFS nelle build utente per i dispositivi avviati su Android 12.

Le build userdebug hanno una copertura dei test migliore rispetto alle build user e vengono sottoposte a test approfonditi durante il ciclo di sviluppo. Il seguente piano riduce al minimo la differenza tra i due tipi di build in termini di accesso a DebugFS e offre i seguenti vantaggi:

  • Impedisce alle build userdebug di dipendere accidentalmente da DebugFS per le nuove funzionalità
  • Garantisce che qualsiasi funzionalità esistente non funzionante a causa della mancanza di DebugFS sia nota nelle prime fasi del ciclo di sviluppo

Gli accessi a debugfs nelle build userdebug sono classificati come segue:

  1. Inizializzazione dei file DebugFS durante l'avvio del dispositivo, ad esempio un accesso in scrittura a un file in DebugFS per attivare la raccolta dei dati di debug.
  2. Generazione di segnalazioni di bug: l'HAL dumpstate legge i file DebugFS quando DumpstateBoard() viene invocato da dumpstate. Queste informazioni fanno parte della segnalazione di bug.
  3. Test e convalida specifici del dispositivo.

La tabella seguente descrive il supporto di ciascuna di queste tre categorie in Android 12. Tieni presente che quanto segue si applica solo alle build userdebug, poiché DebugFS non può essere montato nelle build user.

Caso d'uso Build userdebug di Android 12
Inizializzazioni una tantum dei file DebugFS durante l'avvio. Questo accesso si verifica una sola volta durante il boot. L'HAL Dumpstate esegue questa operazione durante l'inizializzazione dell'HAL. Per attivare la stessa operazione, init monta DebugFS nelle build userdebug prima dell'inizializzazione dell'HAL. Init chiama umount() su DebugFS al termine dell'avvio del dispositivo.
Generare report di bug: l'HAL dumpstate legge i file DebugFS, che diventano parte del report di bug. Eseguito dall'HAL dumpstate entro DumpstateBoard() quando viene chiamato da dumpstate (DumpstateDevice.cpp). Lo strumento dumpstate (parte del framework Android) assicura che DebugFS venga montato durante l'invocazione.
Test e convalida specifici per il dispositivo Adb root e shell. Monta DebugFS dalla shell adb con accesso root1.

1 Per montare DebugFS da adb shell con accesso root, utilizza questo comando:

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

Azioni richieste dal partner

In base a queste modifiche, i partner devono implementare quanto segue sui dispositivi Android 12:

  • Fai in modo che tutte le inizializzazioni dei nodi DebugFS avvengano durante l'inizializzazione HAL dumpstate. Per un esempio di come eseguire questa operazione, consulta DNM: Example for boot time initialization of DebugFS files.
  • Non consentire l'accesso a DebugFS durante l'esecuzione. Si applicano le seguenti eccezioni:
    • Generazione di segnalazioni di bug (proveniente dall'HAL dumpstate)
    • Test e convalida (accessibili da adb root e shell - assicurati di montare prima DebugFS)

Gli sviluppatori possono impostare la proprietà persistente di debug persist.dbg.keep_debugfs_mounted per mantenere DebugFs montato durante i riavvii nelle build userdebug ed eng.

I test di conformità GTS assicurano che il file system DebugFS non sia montato nelle build utente. Le istruzioni neverallow Sepolicy assicurano che nei dispositivi avviati su Android 12 o versioni successive, le procedure non autorizzate non abbiano accesso a DebugFs.