Google is committed to advancing racial equity for Black communities. See how.
Diese Seite wurde von der Cloud Translation API übersetzt.
Switch to English

USB HAL implementieren

Die Android 8.0-Version verschiebt die Verarbeitung von USB-Befehlen aus init Skripten in einen nativen USB-Daemon, um die Konfiguration und Codezuverlässigkeit zu verbessern. Für die Konfiguration der Gadget-Funktion werden init Skripte (Eigenschaftstrigger) verwendet, um gerätespezifische Gadget-Vorgänge auszuführen.

In früheren Versionen wurden diese gerätespezifischen Konfigurationen durch gerätespezifische init Skripte (unter Verwendung von Eigenschaftsauslösern) erreicht. Der Wechsel zu einem HAL-Design (Hardware Abstraction Layer) führt zu einer viel saubereren Implementierung, die diese Probleme löst:

  1. Vorgänge wie das Schreiben in die Kernel-Sysfs-Knoten können fehlschlagen, werden jedoch nicht an den Framework-Code zurückgegeben, der den Eigenschaftsauslöser festlegt. Infolgedessen gehen Frameworks fälschlicherweise davon aus, dass die Vorgänge erfolgreich waren, obwohl sie stillschweigend fehlgeschlagen sind.
  2. init Skripte haben eine begrenzte Anzahl von Operationen, die ausgeführt werden können.

HAL und Höhen

Die gerätespezifischen init Skripte wurden als Ersatz für HAL-Schichten verwendet, um gerätespezifische USB-Vorgänge auszuführen. USB (über ADB) ist eine primäre Schnittstelle zum Debuggen von Systemproblemen. Wenn Sie einen nativen Daemon zur Durchführung der USB-Konfiguration haben, wird die Abhängigkeit vom Framework-Code beseitigt. Selbst wenn das Framework abstürzt, sollte USB ausgeführt werden.

Unter dem ebenfalls in Android 8.0 eingeführten Treble- Modell sind alle HALs von den Systemdiensten isoliert und müssen in ihren eigenen nativen Daemons ausgeführt werden. Dadurch entfällt die Notwendigkeit eines exklusiven USB-Daemons, da die HAL-Schicht auch als USB-Daemon fungiert.

Die Standard-HAL-Implementierung kümmert sich um alle Geräte vor Android 8.0. Daher würde es für die Geräte vor Android 8.0 keine gerätespezifische Arbeit geben. Android 8.0 verwendet die HAL-Schnittstelle, um den Status von USB-Ports abzufragen und Datenrollen- und Power-Rollentausch durchzuführen.

Implementierung

Auf jedem Gerät, das unter Android 8.0 gestartet wird, muss eine neue USB-HAL-Schnittstelle implementiert werden. Die Standardimplementierung sollte sich um Geräte vor Android 8.0 kümmern. Die Standardimplementierung ist ausreichend, wenn das Gerät die Klasse dual_role_usb verwendet, um den dual_role_usb Typ c zu melden. Bei gerätespezifischen USB-Skripten sind möglicherweise geringfügige Änderungen erforderlich, um den Besitz der typc-c-Knoten auf das System zu übertragen.