Android8.0 HIDL繫結式和直通式區別
備註:這裡已Camera模組為例,如問題,歡迎討論。
以往的hal和framwork的程式碼緊密聯絡起來的,為此google為了framework
升級的方便在Android 8.0 上對 Android 作業系統底層進行了重新架構。新的架構已經瞭解一部分,但仍需要不斷學習,加上最近需要將一些專案升級到Android O,所以決定該好好看看了,閱讀程式碼過程中發現存在一種字尾為.hal的檔案,該檔案改變了我的一些久的思想。該檔案具體的作用和語法後續博文再介紹。
目前HAL分為下面4類,具體可以參考下面連結提供,那裡寫的最詳細,這裡只記錄下我自己的理解。
1.繫結式 HAL:這個完全由hidl語言描述,由hidl-gen工具自動生成的hal。此模式下framwework和hal通過程序間binder通訊。(camera相關的是/dev/hwbinder節點)。
Android 8.0 或後續版本的裝置都必須只支援繫結式 HAL。
2.直通式HAL:這個是由hidl 封裝的hal,具體是在hidl封裝處dlopen傳統的hal(目前8.0上Camera是這種形式)大概形如如下面這個。下面右側三個子部分都是在同一個程序中。封裝層dlopen傳統的hal,這樣就不用更改太多程式碼。
3.Same-Process HAL:如它名字所示,是在使用它們的程序中開啟的HAL,同一程序這裡就不需要binder通訊了。
4.傳統 HAL 和舊版 HAL:目前我的理解是實現HAL_MODULE_INFO_SYM的hal,google給出下面的解釋.
傳統 HAL(在 Android 8.0 中已棄用)是指與具有特定名稱及版本號的應用二進位制介面 (ABI) 標準相符的介面。大部分 Android 系統介面(相機、音訊和感測器等)都採用傳統 HAL 形式(已在 hardware/libhardware/include/hardware 下進行定義)。
參考文章:https://source.android.com/devices/architecture/hal-types