1. 程式人生 > >Go,From now on!

Go,From now on!

您可以通過轉換 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 實現)。