Google is committed to advancing racial equity for Black communities. See how.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Implementación de USB HAL

La versión de Android 8.0 mueve el manejo de los comandos USB de los scripts de init a un demonio USB nativo para una mejor configuración y confiabilidad del código. Para la configuración de la función de gadget, los scripts de init (activadores de propiedad) se utilizan para realizar operaciones de gadget específicas del dispositivo.

En versiones anteriores, estas configuraciones específicas del dispositivo se lograron a través de scripts de init específicos del dispositivo (utilizando activadores de propiedad). Pasar a un diseño de capa de abstracción de hardware (HAL) da como resultado una implementación mucho más limpia que resuelve estos problemas:

  1. Las operaciones como las escrituras en los nodos sysfs del kernel podrían fallar, pero no se propagarían al código del framework que establece el disparador de la propiedad. Como resultado, los marcos asumen incorrectamente que las operaciones se han realizado correctamente a pesar de que han fallado silenciosamente.
  2. init scripts de init tienen un número limitado de operaciones que se pueden ejecutar.

HAL y agudos

Los scripts de init específicos del dispositivo se utilizaron como sustitución de las capas HAL para realizar operaciones USB específicas del dispositivo. USB (a través de ADB) es una interfaz principal para depurar problemas del sistema. Tener un demonio nativo para realizar la configuración USB elimina la dependencia del código del marco, por lo que incluso si el marco falla, el USB debería estar en ejecución.

Bajo el modelo Treble también introducido en Android 8.0, todos los HAL están aislados de los servicios del sistema y deben ejecutarse en sus propios demonios nativos. Esto elimina el requisito de tener un demonio USB exclusivo, ya que la capa HAL funciona como un demonio USB.

La implementación predeterminada de HAL se encarga de todos los dispositivos anteriores a Android 8.0. Por lo tanto, no habría ningún trabajo específico de dispositivo para los dispositivos anteriores a Android 8.0. Android 8.0 usa la interfaz HAL para consultar el estado de los puertos USB y realizar intercambios de roles de datos y de roles de energía.

Implementación

Es necesario implementar una nueva interfaz USB HAL en todos los dispositivos que se inician con Android 8.0. La implementación predeterminada debe ocuparse de los dispositivos anteriores a Android 8.0. La implementación predeterminada es suficiente si el dispositivo usa la clase dual_role_usb para informar el estado del puerto tipo c. Es posible que se requieran cambios triviales en los scripts USB específicos del dispositivo para transferir la propiedad de los nodos typc-c al sistema.