您可以將現有的 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_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
在標頭檔案中遇到指標時,就不會
知道指標是否應解讀為陣列或參照,
另一個物件虛假指標也同樣不透明。
int reserved[7]
等欄位必須在以下時間手動移除:
轉換至 HIDL退貨值名稱等項目必須
提供更有意義的資訊例如將
擷取 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 位於其他位置,只需更新指令碼即可)。
檔案更新為最新版本後,即可產生標題檔案並 實作方法如要進一步瞭解如何實作產生的介面,請參閱 HIDL C++ (適用於 C++ 實作) 或 HIDL Java (適用於 Java 實作)。