Utiliser DebugFS dans Android 12

Les appareils qui démarrent avec Android 12 à l'aide de versions de kernel supérieures à la version 5.4 doivent être livrés avec le kernel GKI. Pour que les partenaires puissent accéder à DebugFS dans les builds userdebug pendant leur développement sur le kernel GKI, la configuration du kernel CONFIG_DEBUG_FS est activée dans la defconfig GKI. Ne jamais monter DebugFS dans les builds utilisateur pour les appareils lancés sur Android 12.

Les builds userdebug offrent une meilleure couverture de test que les builds utilisateur et sont soumis à de nombreux tests tout au long du cycle de développement. Le plan suivant minimise la différence entre les deux types de builds 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
  • Assurez-vous que toute fonctionnalité existante qui est endommagée par l'absence 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 de fichiers DebugFS lors du démarrage de l'appareil, telles qu'un accès en écriture à un fichier dans DebugFS pour activer la collecte de données de débogage.
  2. Génération d'un rapport de bug: le HAL dumpstate lit les fichiers DebugFS lorsque DumpstateBoard() est appelé par dumpstate. Ces informations font partie du rapport de bug.
  3. Tests et validations spécifiques à chaque appareil

Le tableau suivant décrit la prise en charge de chacune de ces trois catégories dans Android 12. Notez que ce qui suit ne s'applique qu'aux builds userdebug, car DebugFS ne peut pas être installé dans les builds utilisateur.

Cas d'utilisation Build userdebug d'Android 12
Initialisation unique des fichiers DebugFS au démarrage Cet accès ne se produit qu'une seule fois au démarrage. Le HAL Dumpstate effectue cette opération lors de l'initialisation du HAL. Pour activer cette fonctionnalité, init associe DebugFS dans les builds userdebug avant l'initialisation du HAL. Init appelle umount() sur DebugFS une fois le démarrage de l'appareil terminé.
Génération de rapports de bugs: le HAL dumpstate lit les fichiers DebugFS, qui font partie du rapport de bug. Effectué par le HAL dumpstate dans DumpstateBoard() lorsqu'il est appelé par dumpstate (DumpstateDevice.cpp). L'outil dumpstate (qui fait partie du framework Android) garantit que DebugFS est installé lors de l'appel.
Tests et validation spécifiques à l'appareil Adb root et shell. Montez DebugFS à partir de l'interface système adb avec un accès root1.

1Pour monter DebugFS à partir de adb shell avec un accès racine, utilisez la commande suivante:

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

Actions requises du partenaire

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

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

Les développeurs peuvent définir la propriété persistante de débogage persist.dbg.keep_debugfs_mounted pour maintenir DebugFs monté 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 installé dans les builds utilisateur. Les instructions neverallow de Sepolicy garantissent que, sur les appareils lancés sur Android 12 ou version ultérieure, les processus non autorisés ne sont pas autorisés à accéder à DebugFs.