本文轉載自:https://blog.csdn.net/u013357557/article/details/84561457
HIDL背景
Treble 是 Google Android 團隊的一項重大項目,意在 Android 操作系統框架在架構方面的一項重大改變,旨在讓制造商以更低的成本更輕松、更快速地將設備更新到新版 Android 系統。Android 7.x 及更早版本中沒有正式的供應商接口,因此設備制造商必須更新大量 Android 代碼才能將設備更新到新版 Android 系統:
圖1 Treble 推出前的Android 更新環境
Android O以后,Treble 提供了一個穩定的新供應商接口,供設備制造商訪問 Android 代碼中特定於硬件的部分,這樣一來,設備制造商只需更新 Android 操作系統框架,即可跳過芯片制造商直接提供新的 Android 版本:
圖2 Treble 推出后的Android 更新環境
HIDL簡介
HIDL 是用於指定 HAL 與其用戶之間接口的一個接口描述語言(Interface Description Language),它允許將指定的類型與函數調用收集到接口(Interface)和包(Package)中。更廣泛地說,HIDL 是一個可以讓那些獨立編譯的代碼庫(Libraries)之間進行通信的系統。 HIDL 實際上是用於進行進程間通信(Inter-process Communication,IPC)的。進程間的通信可以稱為 Binder 化(Binderized)。對於必須連接到進程的庫,也可以使用 passthough 模式(但在Java中不支持)。 HIDL 將指定的數據結構與方法簽名組織到接口中,這些接口又會被收集到包中以供使用。它的語法與 C++、JAVA 是類似的,不過關鍵字集合不盡相同。其注釋風格與 JAVA 是一致的。
HIDL設計
設計 HIDL 這個機制的目的,主要是想把框架(framework)與 HAL 進行隔離,使得框架部分可以直接被覆蓋、更新,而不需要重新對 HAL 進行編譯。HAL 的部分將會放在設備的 /vendor 分區中,並且是由設備供應商(vendors)或 SOC 制造商來構建。這使得框架部分可以通過 OTA 方式更新,同時不需要重新編譯 HAL。
3.1直通式HAL( Passthrough 模式)和 綁定式 HAL (Binderized模式)
為了將以往設備的 Android 版本更新到 Android O,開發者需要將傳統的 HAL 封裝到新的 HIDL 接口中,這個接口為 HAL 提供了 Binder 化以及 Passthrough 模式。這個封裝過程對 HAL 以及 Android Framework 都是透明的。
Passthrough 模式僅對 C++ 客戶端與實現適用,以往的 Android 版本設備中,HAL 不會采用 JAVA 語言來寫,所以 JAVA HAL 必然是 Binder 化的。
綁定式 HAL。以 HAL 接口定義語言 (HIDL) 表示的 HAL。這些 HAL 取代了早期 Android 版本中使用的傳統 HAL 和舊版 HAL。在綁定式 HAL 中,Android 框架和 HAL 之間通過 Binder 進程間通信 (IPC) 調用進行通信。所有在推出時即搭載了 Android 8.0 或后續版本的設備都必須只支持綁定式 HAL。大致框架圖如下,對於Android O之前的設備,對應圖1,對於從之前的設備升級到O的版本,對應圖2、圖3. 對於直接基於Android O開發的設備,對應圖4。
在Android O之前,HAL是一個個的.so庫,通過dlopen來進行打開,庫和framework位於同一個進程。如圖3所示:
圖3 Android O之前Framework跟HAL的通信
在Android O之后,framework和hal運行於不同的進程,所有的HAL采用新的HIDL技術來完成。
圖4 Android O之后Framework跟HAL的通信
參考文獻
1、 Android HIDL 簡介
https://blog.csdn.net/qidi_huang/article/details/76572404
2、 Android HIDL學習(1) ---- 簡介
https://www.jianshu.com/p/b3a2c7117ccc
3、Android HIDL學習(2) ---- HelloWorld
https://www.jianshu.com/p/ca6823b897b5
4、探索hidl-gen使用及IWifi.hal 實現
https://blog.csdn.net/sinat_20059415/article/details/81808212
5、在Android 8.0之后版本上添加Hidl Service
https://blog.csdn.net/anlory/article/details/82025916
6、AndroidO Treble架構下hwservicemanager啟動過程
https://blog.csdn.net/marshal_zsx/article/details/80293163
7、Android8.1HAL層開發
https://blog.csdn.net/u013082948/article/details/80529419 //重點
8、android中SELINUX規則分析和語法簡介
https://www.2cto.com/kf/201504/390742.html
9、如何關閉JACK編譯器
https://blog.csdn.net/qilu0882/article/details/81328953
10、Android Treble架構解析
https://www.cnblogs.com/wangzhe1635/p/9034640.html
11、關閉Android jack 編譯
https://blog.csdn.net/kkguo1990/article/details/74738901
---------------------
作者:Gunder
來源:CSDN
原文:https://blog.csdn.net/u013357557/article/details/84561457
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!