Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

實施USB HAL

Android 8.0版本將對USB命令的處理從init腳本移到了本地USB守護程序中,以實現更好的配置和代碼可靠性。對於小工具功能配置, init腳本(屬性觸發器)用於執行設備特定的小工具操作。

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

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

HAL和高音

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

在Android 8.0中還引入了Treble模型,所有HAL均與系統服務隔離,並且需要在其自己的本地守護程序中運行。這消除了擁有專用USB守護程序的要求,因為HAL層可以完美地兼作USB守護程序。

默認的HAL實施會照顧所有Android 8.0之前的設備。因此,Android 8.0之前的設備不會有任何設備特定的工作。 Android 8.0使用HAL界面查詢USB端口的狀態並執行數據角色和電源角色交換。

實作

需要在Android 8.0上啟動的每個設備上實現新的USB HAL接口。默認實現應注意Android 8.0之前的設備。如果設備使用dual_role_usb類報告c型端口狀態,則默認實現就足夠了。特定於設備的USB腳本可能需要進行細微更改,才能將typc-c節點的所有權轉讓給系統。