實現 USB HAL

而Android 8.0版移動處理USB的命令進行init腳本和轉化為更好的配置和代碼可靠性的原生USB守護進程。對於小工具功能配置, init腳本(屬性觸發器)用於執行特定的器件的小工具的操作。

在以前的版本,這些設備的特性配置是通過特定設備的實現init腳本(使用屬性觸發器)。轉向硬件抽象層 (HAL) 設計會產生更清晰的實現,可以解決這些問題:

  1. 寫入內核 sysfs 節點等操作可能會失敗,但不會傳播回設置屬性觸發器的框架代碼。結果,框架錯誤地假設操作已經成功,即使它們默默地失敗了。
  2. init腳本有可能被執行的操作的數量有限。

Android 12 版本增加了對網絡控制模型 (NCM) 和 API 調用的 USB 小工具 HAL 支持,這些調用返回 HAL 版本號和 USB 速度。有關API的更多信息通過USB HAL調用可用的,看到android.hardware.usb包的摘要

HAL 和高音

特定於設備的init腳本被用作一個替代HAL層來執行特定的設備-USB的操作。 USB(通過 ADB)是調試系統問題的主要接口。使用本機守護程序來執行 USB 配置消除了對框架代碼的依賴,因此即使框架崩潰 USB 也應該運行。

根據高音模型的Android 8.0還介紹,所有的HAL都是從系統服務分離,都必須在自己的本地守護進程運行。這消除了擁有專用 USB 守護程序的要求,因為 HAL 層可以很好地兼作 USB 守護程序。

默認 HAL 實現負責所有 Android 8.0 之前的設備。因此,對於 Android 8.0 之前的設備,不會有任何特定於設備的工作。 Android 8.0 使用 HAL 接口查詢 USB 端口的狀態並執行數據角色和電源角色互換。

執行

新的 USB HAL 接口需要在搭載 Android 8.0 的每台設備上實現。默認實現應處理 Android 8.0 之前的設備。如果設備使用默認的實現是足夠dual_role_usb類報告類型-C端口狀態。可能需要在特定於設備的 USB 腳本中進行細微的更改,以將 typc-c 節點的所有權轉移到系統。