轉換 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 目錄運行

c2hal 操作

當您運行 c2hal 時,標頭文件中的所有內容都會轉移到 .hal 文件。

c2hal 會識別在提供的標頭文件中包含函數指針的結構體,並將每個結構體轉換爲單獨的接口文件。 例如,alloc_device_t 會轉換爲 IAllocDevice HAL 模塊(位於文件 IAllocDevice.hal 中)。

所有其他數據類型都會複製到 types.hal 文件。 Pound-defines已移到枚舉中,不屬於 HIDL 的項或不可轉換的項(例如靜態函數聲明)會複製到標記有文字“NOTE”的備註中。

手動操作

c2hal 工具在遇到某些構造時不知該如何應對。例如,HIDL 沒有原始指針的概念;因此,當 c2hal 遇到標頭文件中的指針時,不知道應將指針解讀爲數組還是對其他對象的引用。它同樣不理解無類型指針。

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

實現 HAL

創建 .hal 文件以表示您的 HAL 後,您必須生成在 C++ 和 Java 中創建語言支持的 makefile(Make 或 Soong),除非 HAL 使用的功能在 Java 中不受支持。./hardware/interfaces/update-makefiles.sh 腳本可以爲 hardware/interfaces 目錄中的 HAL 自動生成 makefile(對於其他位置的 HAL,只需更新腳本即可)。

如果 makefile 是最新版本,則表示您已準備好生成標頭文件和實現方法了。要詳細瞭解如何實現生成的接口,請參閱 HIDL C++(用於 C++ 實現)或 HIDL Java(用於 Java 實現)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章