Verwendung von DebugFS in Android 12

Geräte, die mit Android 12 und höheren Kernelversionen als v5.4 gestartet werden, müssen mit dem GKI-Kernel ausgeliefert werden. Damit Partner in Userdebug-Builds auf DebugFS zugreifen können, während sie auf dem GKI-Kernel entwickeln, ist die Kernelkonfiguration CONFIG_DEBUG_FS in der GKI-Defconfig aktiviert. Mounten Sie DebugFS niemals in Benutzer-Builds für Geräte, die unter Android 12 starten.

Userdebug-Builds bieten eine bessere Testabdeckung als User-Builds und werden während des gesamten Entwicklungszyklus intensiv getestet. Der folgende Plan minimiert den Unterschied zwischen den beiden Build-Typen in Bezug auf DebugFS Zugriff und bietet folgende Vorteile:

  • Verhindert, dass Userdebug-Builds versehentlich von DebugFS abhängig sind, um neue Funktionen zu erhalten
  • Stellt sicher, dass alle vorhandenen Funktionen, die durch das Fehlen von DebugFS beeinträchtigt werden, frühzeitig im Entwicklungszyklus bekannt sind

Debugfs-Zugriffe in Userdebug-Builds werden wie folgt kategorisiert:

  1. DebugFS Dateiinitialisierungen während des Gerätestarts, z. B. ein Schreibzugriff auf eine Datei in DebugFS , um die Debug-Datenerfassung zu aktivieren.
  2. Generierung von Fehlerberichten: Die dumpstate HAL liest DebugFS Dateien, wenn DumpstateBoard() von dumpstate aufgerufen wird. Diese Informationen werden Teil des Fehlerberichts.
  3. Gerätespezifische Prüfung und Validierung.

In der folgenden Tabelle wird beschrieben, wie jede dieser drei Kategorien in Android 12 unterstützt wird. Beachten Sie, dass das Folgende nur für Userdebug-Builds gilt, da DebugFS nicht in Benutzerbuilds gemountet werden kann.

Anwendungsfall Android 12 Userdebug-Build
Einmalige Initialisierung der DebugFS Dateien während des Startvorgangs . Dieser Zugriff erfolgt nur einmal während des Bootvorgangs. Dumpstate HAL führt dies während der HAL-Initialisierung durch. Um dasselbe zu ermöglichen, mountet init DebugFS in Userdebug-Builds, bevor die HAL initialisiert wird. Init ruft umount() auf DebugFS auf, wenn das Gerät den Bootvorgang abgeschlossen hat.
Generierung von Fehlerberichten : Die Dumpstate-HAL liest DebugFS Dateien, die Teil des Fehlerberichts werden. Wird von dumpstate HAL in DumpstateBoard() durchgeführt, wenn es von dumpstate ( DumpstateDevice.cpp ) aufgerufen wird. Das Dumpstate-Tool (Teil des Android-Frameworks) stellt sicher, dass DebugFS während des Aufrufs gemountet wird.
Gerätespezifische Prüfung und Validierung ADB-Root und Shell. Mounten Sie DebugFS über die ADB-Shell mit Root-Zugriff 1 .

1 Um DebugFS von adb shell mit Root-Zugriff bereitzustellen, verwenden Sie diesen Befehl:

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

Erforderliche Partneraktionen

Partner müssen basierend auf diesen Änderungen auf Android 12-Geräten Folgendes umsetzen:

  • Sorgen Sie dafür, dass alle Startzeitinitialisierungen von DebugFS Knoten während der Dumpstate-HAL-Initialisierung erfolgen. Ein Beispiel dafür finden Sie unter DNM: Beispiel für die Bootzeitinitialisierung von DebugFS Dateien .
  • Erlauben Sie während der Laufzeit keinen DebugFS Zugriff. Es gelten folgende Ausnahmen:
    • Generierung von Fehlerberichten (kommt aus der Dumpstate-HAL)
    • Testen und Validieren (zugänglich über adb root und shell – stellen Sie sicher, dass DebugFS zuerst gemountet wird)

Entwickler können die persistente Debug-Eigenschaft persist.dbg.keep_debugfs_mounted festlegen, um DebugFs über Neustarts hinweg bei Userdebug- und Eng-Builds gemountet zu lassen.

GTS-Konformitätstests stellen sicher, dass das DebugFS Dateisystem nicht in Benutzer-Builds gemountet wird. Sepolicy neverallow Anweisungen stellen sicher, dass auf Geräten, die mit Android 12 oder höher gestartet werden, nicht autorisierten Prozessen kein Zugriff auf DebugFs gewährt wird.