Utilisation de DebugFS dans Android 12

Les appareils lancés avec Android 12 utilisant des versions de noyau supérieures à la v5.4 doivent être livrés avec le noyau GKI. Afin que les partenaires puissent accéder DebugFS dans les versions userdebug pendant qu'ils développent sur le noyau GKI, la configuration du noyau CONFIG_DEBUG_FS est activée dans la configuration defconfig de GKI. Ne montez jamais DebugFS dans les versions utilisateur pour les appareils lancés sur Android 12.

Les versions Userdebug ont une meilleure couverture de test que les versions utilisateur et sont fortement testées tout au long du cycle de développement. Le plan suivant minimise la différence entre les deux types de build en ce qui concerne l'accès à DebugFS et offre les avantages suivants :

  • Empêche les builds userdebug de dépendre accidentellement de DebugFS pour de nouvelles fonctionnalités
  • Garantit que toute fonctionnalité existante interrompue par le manque de DebugFS est connue dès le début du cycle de développement.

Les accès Debugfs dans les builds userdebug sont classés comme suit :

  1. Initialisations du fichier DebugFS lors du démarrage du périphérique, comme un accès en écriture à un fichier dans DebugFS pour activer la collecte de données de débogage.
  2. Génération de rapport de bug : le HAL dumpstate lit les fichiers DebugFS lorsque DumpstateBoard() est invoqué par dumpstate . Ces informations font partie du rapport de bug.
  3. Tests et validation spécifiques à l'appareil.

Le tableau suivant décrit comment chacune de ces trois catégories est prise en charge dans Android 12. Notez que ce qui suit s'applique uniquement aux builds userdebug puisque DebugFS ne peut pas être monté dans les builds utilisateur.

Cas d'utilisation Version de débogage utilisateur d'Android 12
Initialisation unique des fichiers DebugFS , lors du démarrage . Cet accès n'a lieu qu'une seule fois au démarrage. Dumpstate HAL effectue cette opération lors de l'initialisation de HAL. Pour activer la même chose, init monte DebugFS dans les versions userdebug avant l'initialisation de HAL. Init appelle umount() sur DebugFS lorsque le périphérique a terminé le démarrage.
Génération de rapport de bug : le HAL dumpstate lit les fichiers DebugFS , qui font partie du rapport de bug. Effectué par dumpstate HAL dans DumpstateBoard() lorsqu'il est invoqué par dumpstate ( DumpstateDevice.cpp ). L'outil dumpstate (qui fait partie du framework Android) garantit que DebugFS se monte pendant l'invocation.
Tests et validation spécifiques à l'appareil Racine et shell Adb. Montez DebugFS à partir du shell adb avec un accès root 1 .

1 Pour monter DebugFS à partir adb shell avec un accès root, utilisez cette commande :

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

Actions requises du partenaire

Les partenaires doivent adopter les mesures suivantes en fonction de ces modifications sur les appareils Android 12 :

  • Effectuez toutes les initialisations au démarrage des nœuds DebugFS pendant l'initialisation dumpstate HAL. Pour un exemple de la façon de procéder, consultez DNM : Exemple d'initialisation au démarrage des fichiers DebugFS .
  • N'autorisez pas l'accès DebugFS pendant l'exécution. Les exceptions suivantes s'appliquent :
    • Génération de rapport de bug (provient du HAL dumpstate)
    • Test et validation (accessibles par adb root et shell - assurez-vous que DebugFS est monté en premier)

Les développeurs peuvent définir la propriété persistante de débogage persist.dbg.keep_debugfs_mounted pour garder DebugFs montés lors des redémarrages sur les builds userdebug et eng.

Les tests de conformité GTS garantissent que le système de fichiers DebugFS n'est pas monté dans les builds utilisateur. Les instructions Sepolicy neverallow garantissent que sur les appareils lancés sur Android 12 ou version ultérieure, les processus non autorisés n'ont pas accès à DebugFs .