Utilizzo di DebugFS in Android 12

I dispositivi avviati con Android 12 che utilizzano versioni del kernel successive alla v5.4 devono essere forniti con il kernel GKI. Affinché i partner possano accedere DebugFS nelle build userdebug mentre sviluppano sul kernel GKI, la configurazione del kernel CONFIG_DEBUG_FS è abilitata nel defconfig GKI. Non montare mai DebugFS nelle build utente per i dispositivi che si avviano su Android 12.

Le build di Userdebug hanno una migliore copertura dei test rispetto alle build degli utenti e vengono testate pesantemente durante tutto il ciclo di sviluppo. Il seguente piano riduce al minimo la differenza tra i due tipi di build rispetto all'accesso DebugFS e offre questi vantaggi:

  • Impedisce alle build di userdebug di dipendere accidentalmente da DebugFS per nuove funzionalità
  • Garantisce che qualsiasi funzionalità esistente interrotta dalla mancanza di DebugFS sia nota nelle prime fasi del ciclo di sviluppo

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

  1. Inizializzazioni 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 del report di bug: l'HAL dumpstate legge i file DebugFS quando DumpstateBoard() viene richiamato da dumpstate . Queste informazioni diventano parte della segnalazione di bug.
  3. Test e validazione specifici del dispositivo.

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

Caso d'uso Build di debug utente di Android 12
Inizializzazione singola dei file DebugFS , durante l'avvio . Questo accesso avviene solo una volta durante la fase di avvio. L'HAL Dumpstate esegue questa operazione durante l'inizializzazione dell'HAL. Per abilitare lo stesso, init monta DebugFS nelle build userdebug prima dell'inizializzazione dell'HAL. Init chiama umount() su DebugFS quando il dispositivo ha completato l'avvio.
Generazione della segnalazione di bug : l'HAL dumpstate legge i file DebugFS , che diventano parte della segnalazione di bug. Eseguito dall'HAL dumpstate all'interno di DumpstateBoard() quando richiamato da dumpstate ( DumpstateDevice.cpp ). Lo strumento dumpstate (parte del framework Android) garantisce che DebugFS venga montato durante l'invocazione.
Test e validazione specifici del dispositivo Adb root e shell. Montare DebugFS dalla shell adb con accesso root 1 .

1 Per montare DebugFS dalla adb shell con accesso root, utilizzare questo comando:

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

Azioni partner richieste

I partner devono adottare quanto segue in base a queste modifiche nei dispositivi Android 12:

  • Effettuare tutte le inizializzazioni in fase di avvio dei nodi DebugFS durante l'inizializzazione dell'HAL dumpstate. Per un esempio di come eseguire questa operazione, consulta DNM: esempio di inizializzazione in fase di avvio dei file DebugFS .
  • Non consentire l'accesso DebugFS durante il runtime. Si applicano le seguenti eccezioni:
    • Generazione di segnalazioni di bug (proviene dall'HAL dumpstate)
    • Test e convalida (accessibile da adb root e shell : assicurati che DebugFS sia montato prima)

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

I test di conformità GTS assicurano che il filesystem DebugFS non sia montato nelle build degli utenti. Le dichiarazioni Sepolicy neverallow garantiscono che nei dispositivi avviati su Android 12 o versioni successive, ai processi non autorizzati non venga fornito l'accesso a DebugFs .