轉換 HAL 模組

您可以將現有的 HAL 模組更新為 HIDL HAL 模組,方法是將 hardware/libhardware/include/hardware 中的標頭。

使用 c2hal

c2hal 工具可處理大部分的轉換工作,減少所需的手動作業 並輸入變更內容舉例來說,如要產生 NFC 的 HIDL .hal 檔案 HAL:

make c2hal
c2hal -r android.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport -p android.hardware.nfc@1.0 hardware/libhardware/include/hardware/nfc.h

這些指令會在 hardware/interfaces/nfc/1.0/ 中新增檔案。執行中 來自$ANDROID_BUILD_TOPhardware/interfaces/update-makefiles.sh 目錄也會將必要的 makefile 新增至 HAL。在這裡 手動變更即可完全轉換 HAL

c2hal 活動

執行 c2hal 時,系統會轉移標頭檔案中的所有內容 至 .hal 個檔案。

c2hal 可識別包含函式指標的結構體 並將每個結構體轉換為獨立的介面檔案。 舉例來說,alloc_device_t 會轉換為 IAllocDevice HAL 模組 (位於檔案中 IAllocDevice.hal)。

所有其他資料類型都會複製到 types.hal 檔案中。 磅定義會移至列舉項目,但項目不屬於 HIDL 的一部分 可轉式轉換 (例如靜態函式宣告) 複製到註解中 並標有文字「NOTE」。

手動活動

c2hal 工具不知道發生問題時該怎麼做 特定結構例如,HIDL 沒有原始指標的概念;因為 此,當 c2hal 在標頭檔案中遇到指標時,就不會 知道指標是否應解讀為陣列或參照, 另一個物件虛假指標也同樣不透明。

int reserved[7] 等欄位必須在以下時間手動移除: 轉換至 HIDL退貨值名稱等項目必須 提供更有意義的資訊例如將 擷取 NFC 中的 write 等方法 int32_t write_retStatus status (其中 Status 是新的列舉,其中包含可能的 NFC 狀態。

實作 HAL

建立 .hal 檔案來代表 HAL 後, 產生語言支援使用的 makefile (Make 或 Soong) C++ 與 Java (除非 HAL 使用 Java 不支援的功能)。 ./hardware/interfaces/update-makefiles.sh 指令碼可自動執行 為位於 hardware/interfaces 的 HAL 產生 makefile 目錄 (若是 HAL 位於其他位置,只需更新指令碼即可)。

檔案更新為最新版本後,即可產生標題檔案並 實作方法如要進一步瞭解如何實作產生的介面,請參閱 HIDL C++ (適用於 C++ 實作) 或 HIDL Java (適用於 Java 實作)。