Implémentation de HAL USB

Android version 8.0 se déplace de traitement des commandes USB sur init des scripts et dans un démon USB natif pour la configuration de meilleure qualité et la fiabilité du code. Pour la configuration de la fonction Gadget, init des scripts (déclencheurs de propriété) sont utilisés pour effectuer des opérations de gadget spécifiques à l' appareil.

Dans les versions précédentes, ces configurations spécifiques de l' appareil ont été obtenus grâce spécifiques à l' appareil d' init des scripts ( en utilisant des déclencheurs de propriété). Le passage à une conception de couche d'abstraction matérielle (HAL) se traduit par une implémentation beaucoup plus propre qui résout ces problèmes :

  1. Les opérations telles que les écritures sur les nœuds sysfs du noyau peuvent échouer mais ne pas être propagées vers le code du framework qui définit le déclencheur de propriété. Par conséquent, les frameworks supposent à tort que les opérations ont réussi même si elles ont échoué en silence.
  2. init des scripts ont un nombre limité d'opérations qui pourraient être exécutées.

La version Android 12 ajoute la prise en charge USB Gadget HAL pour les modèles de contrôle de réseau (NCM) et les appels d'API qui renvoient à la fois le numéro de version HAL et la vitesse USB. Pour plus d' informations sur l'API appelle disponibles dans HAL USB, voir le android.hardware.usb résumé du paquet .

HAL et aigus

Les spécifiques à l' appareil d' init des scripts ont été utilisés comme une substitution pour les couches HAL pour effectuer des opérations USB spécifiques à l' appareil. USB (via ADB) est une interface principale pour le débogage des problèmes du système. Avoir un démon natif pour effectuer la configuration USB élimine la dépendance au code du framework, donc même si le framework tombe en panne, l'USB doit être en cours d'exécution.

Sous le Treble modèle a également introduit dans Android 8.0, tous les HALs sont isolés des services système et sont tenus d'exécuter leurs propres démons indigènes. Cela élimine la nécessité d'avoir un démon USB exclusif, car la couche HAL fait parfaitement office de démon USB.

L'implémentation HAL par défaut prend en charge tous les appareils antérieurs à Android 8.0. Par conséquent, il n'y aurait aucun travail spécifique à l'appareil pour les appareils antérieurs à Android 8.0. Android 8.0 utilise l'interface HAL pour interroger l'état des ports USB et pour effectuer des échanges de rôle de données et de rôle d'alimentation.

Mise en œuvre

La nouvelle interface USB HAL doit être implémentée sur chaque appareil lancé sur Android 8.0. L'implémentation par défaut doit prendre en charge les appareils antérieurs à Android 8.0. La mise en œuvre par défaut est suffisante si l'appareil utilise la dual_role_usb classe pour signaler l' état du port de type c. Des modifications mineures peuvent être nécessaires dans les scripts USB spécifiques au périphérique pour transférer la propriété des nœuds typc-c au système.