轉換 HAL 模組

您可以透過轉換hardware/libhardware/include/hardware中的標頭將預先存在的 HAL 模組更新為 HIDL HAL 模組。

使用c2hal

c2hal工具處理大部分轉換工作,減少了所需的手動更改的數量。例如,要為 NFC HAL 產生 HIDL .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_TOP 目錄執行hardware/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在頭檔中遇到指標時,它不知道該指標是否應該解釋為陣列或對另一個物件的參考。空指針也同樣是不透明的。

在轉換到 HIDL 期間,必須手動刪除int reserved[7]等欄位。傳回值名稱等項目應更新為更有意義的內容;例如,將 NFC 中write等方法的傳回參數從自動產生的int32_t write_ret轉換為Status status (其中Status是包含可能的 NFC 狀態的新枚舉)。

實施 HAL

建立.hal檔案來表示 HAL 後,必須產生 makefile(Make 或 Soong)來建立 C++ 和 Java 語言支援(除非 HAL 使用 Java 中不支援的功能)。 ./hardware/interfaces/update-makefiles.sh腳本可以自動為位於hardware/interfaces目錄中的 HAL 產生 makefile(對於其他位置的 HAL,只需更新腳本即可)。

當 makefile 是最新的時,您就可以產生頭檔並實作方法了。有關實現生成的介面的詳細信息,請參閱HIDL C++ (對於 C++ 實作)或HIDL Java (對於 Java 實作)。