Treble方案在Linaro推了3年,從一開始誰都說不清楚是什麼,現在再看,看起來比較成熟了,雖然我自己不做手機方案了,但現在有人想到要「在伺服器領域也可以學習Treble的優秀實踐」,所以我也來總結一下Treble方案的核心在什麼地方。
Treble現在比較完整的敘述在這裡:
https://source.android.com/devices/architecture/?source.android.comhttps://source.android.com/devices/architecture/images/VNDK.pdf?source.android.com它的目標現在也比較清楚了,是要把Framework部分完全獨立出來,讓升級Framework不需要跟著下面Vendor相關的部分相對獨立。
Treble提供了類似以前CTS兼容性測試套件類似的VTS前向兼容測試套件對兼容性進行測試。
Treble兼容性通過升級的HAL層實現,為此引入了一種HIDL語言來描述兩者之間的關係,定義了兩種HAL:
綁定式:主要用於流量不大的介面,基於Binder進行通訊
直通式:主要用於流量大的介面,基於傳統的調用進行通訊,有可能是在同一個進程內(SP-HAL),也可以通過共享內存來實現(比如傳統的HWComposer)
HIDL本質上是對Binder介面的封裝,源文件用hal做擴展名,很類似過去Binder的Java介面定義文件,像這樣:
interface IBar extends IFoo { // IFoo is another interface
// embedded types
struct MyStruct {/*...*/};
// interface methods
create(int32_t id) generates (MyStruct s);
close();
};
如果是綁定式或者共享內存式,Framework和HAL間就是IPC調用,如果是SP-HAL方式,就變成dlopen,然後直接進行相關的本地調用。
拿個現場的圖來看更簡單: