DebugFS in Android 12 verwenden

Geräte, die mit Android 12 und Kernelversionen höher als Version 5.4 auf den Markt kommen, müssen mit dem GKI-Kernel ausgeliefert werden. Damit Partner bei der Entwicklung auf dem GKI-Kernel auf DebugFS in Userdebug-Builds zugreifen können, ist die Kernelkonfiguration CONFIG_DEBUG_FS in der GKI-Defconfig aktiviert. DebugFS darf in Nutzerbuilds für Geräte, die mit Android 12 ausgeliefert werden, niemals bereitgestellt werden.

Userdebug-Builds haben eine bessere Testabdeckung als User-Builds und werden während des gesamten Entwicklungszyklus intensiv getestet. Mit dem folgenden Plan werden die Unterschiede zwischen den beiden Buildtypen in Bezug auf den DebugFS-Zugriff minimiert. Außerdem bietet er folgende Vorteile:

  • Verhindert, dass Userdebug-Builds versehentlich für neue Funktionen von DebugFS abhängig sind
  • So können Sie bereits früh im Entwicklungsprozess feststellen, ob vorhandene Funktionen aufgrund des fehlenden DebugFS nicht funktionieren.

Debugfs-Zugriffe in userdebug-Builds werden folgendermaßen kategorisiert:

  1. DebugFS-Dateiinitialisierungen während des Startens des Geräts, z. B. Schreibzugriff auf eine Datei in DebugFS, um die Erfassung von Debug-Daten 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 Tests und Validierung

In der folgenden Tabelle wird beschrieben, wie diese drei Kategorien in Android 12 unterstützt werden. Hinweis: Die folgenden Informationen gelten nur für Userdebug-Builds, da DebugFS in User-Builds nicht bereitgestellt werden kann.

Anwendungsfall Android 12-Userdebug-Build
Einmalige Initialisierung von DebugFS-Dateien beim Start Dieser Zugriff erfolgt nur einmal während des Bootens. Dumpstate HAL führt dies während der HAL-Initialisierung aus. Um dies zu aktivieren, muss init DebugFS in Userdebug-Builds vor der Initialisierung des HAL bereitgestellt werden. Init ruft umount() auf DebugFS auf, wenn das Gerät vollständig hochgefahren ist.
Fehlerberichterstellung: Die HAL von dumpstate liest DebugFS-Dateien, die Teil des Fehlerberichts werden. Wird von der dumpstate HAL innerhalb von DumpstateBoard() ausgeführt, wenn sie von dumpstate aufgerufen wird (DumpstateDevice.cpp). Das Dumpstate-Tool (Teil des Android-Frameworks) sorgt dafür, dass DebugFS während der Aufrufs bereitgestellt wird.
Gerätespezifische Tests und Validierung Adb root und shell DebugFS über die adb-Shell mit Root-Zugriff bereitstellen1

1: Verwenden Sie diesen Befehl, um DebugFS von adb shell mit Root-Zugriff bereitzustellen:

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

Erforderliche Partneraktionen

Aufgrund dieser Änderungen müssen Partner auf Android 12-Geräten Folgendes beachten:

  • Alle Initialisierungen von DebugFS-Knoten während des Starts müssen während der HAL-Initialisierung von dumpstate erfolgen. Ein Beispiel dazu finden Sie unter DNM: Beispiel für die Initialisierung von DebugFS-Dateien beim Start.
  • Lassen Sie während der Laufzeit keinen Zugriff für DebugFS zu. Es gelten folgende Ausnahmen:
    • Fehlerberichterstellung (stammt aus der Dumpstate HAL)
    • Testen und Validieren (Zugriff über adb root und shell – DebugFS muss zuerst bereitgestellt werden)

Entwickler können die persistente Debugeigenschaft persist.dbg.keep_debugfs_mounted so festlegen, dass DebugFs bei Neustarts in userdebug- und eng-Builds bereitgestellt bleibt.

Mit GTS-Compliance-Tests wird sichergestellt, dass das DebugFS-Dateisystem nicht in Nutzerbuilds bereitgestellt wird. Mit Sepolicy-neverallow-Anweisungen wird sichergestellt, dass auf Geräten, die mit Android 12 oder höher gestartet werden, nicht autorisierten Prozessen kein Zugriff auf DebugFs gewährt wird.