成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

HDI硬件設備接口介紹

2022-04-28 15:39:36來源:威易網作者:

HDF驅動框架是OpenHarmony系統硬件生態開放的基礎,為驅動開發者提供了驅動加載、驅動服務管理和驅動消息機制等驅動框架能力,同時還為開發者提供了規范的HDI硬件設備接口,讓開發者能屏蔽南向設備差異,提供更好的

HDF驅動框架是OpenHarmony系統硬件生態開放的基礎,為驅動開發者提供了驅動加載、驅動服務管理和驅動消息機制等驅動框架能力,同時還為開發者提供了規范的HDI硬件設備接口,讓開發者能屏蔽南向設備差異,提供更好的硬件。本文將為大家帶來HDI 硬件設備接口的介紹。 

\

圖1 HDF驅動框架

 

1. HDI介紹 

HDI(Hardware Device Interface,硬件設備接口)是HDF驅動框架為開發者提供的硬件規范化描述性接口。在OpenHarmony 分層結構中,HDI位于 “基礎系統服務層”和“設備抽象層(DAL)”之間。硬件設備通過DAL抽象化,并基于IDL(Interface Description Language)接口描述語言描述后,為上層應用或服務提供了規范的硬件設備接口。 

\

圖2 OpenHarmony 分層結構 

HDI支持“IPC模式”及“直通模式”兩種調用方式。其中,IPC模式即跨進程通信模式,基于binder機制實現,調用端通過Proxy代理庫調用HDI接口,具備良好的解耦性和安全性,是標準系統的默認部署方式。直通模式,將HDI實現為共享庫,調用端使用dlopen加載HDI實現庫并直接調用HDI接口,是小型系統的默認部署方式,同時還適用于對性能有特殊需求的標準系統模塊。

\

圖3 兩種調用方式

HDI硬件設備接口的優點用一句話總結就是:為硬件的接入提供了統一的實現通路。屏蔽了硬件接口的具體實現,實現系統軟件與硬件的架構解耦。讓開發者專注于硬件接口的使用,從而簡化開發過程,提升開發效率。 

2. HDI實現 

通過上文的介紹,相信很多小伙伴會有疑問,HDI接口是怎么實現的呢?下面我們將為你介紹IPC模式下基于C/S(Client-Server客戶端與服務端)結構的HDI接口實現。

2.1 IDL接口描述語言 

為方便后文的理解,我們先簡單了解一下IDL接口描述語言。 

IDL(Interface Description Language)是一類用來描述接口的語言,通過一種中立的方式來定義客戶端與服務端均認可的編程接口,可以實現在二者間的跨進程通信(IPC)。跨進程通信意味著可以在一個進程訪問另一個進程的數據,或調用另一個進程的方法。通常把應用接口提供方(供調用)稱為服務端,調用方稱為客戶端。 

IDL先把需要傳遞的對象分解成操作系統能夠理解的基本類型,然后根據接口聲明編譯,生成IPC/RPC代理(Proxy)和樁(Stub)的C/C++代碼,從而為調用者提供一致的接口和調用方式。 

\

圖4 IDL IPC模式通信模型

 

2.1 基于IDL語言實現HDI接口 

首先,使用IDL語法描述HDI接口并保存為.idl文件,然后編寫.idl文件的編譯腳本BUILD.gn文件,最后編譯.idl文件即可。下面我們將為大家演示電源子系統的HDI接口的實現過程。 

(1)使用IDL語法編寫 .idl 文件 

● 定義電源接口 IPowerInterface.idl

\

● 如果需要從服務端回調,可以定義callback接口類IPowerHdiCallback.idl 

\ 

● 如果interface中用到了自定義數據類型,將自定義類型定義到powerTypes.idl 

\

(2)編寫.idl 文件的編譯腳本BUILD.gn

\ 

(3)編譯 .idl文件

使用編譯工具hdi-gen編譯IDL文件,IDL文件在編譯過程中轉換為C/C++語言的函數接口聲明、客戶端與服務端IPC相關過程代碼,開發者只需要基于生成的power.h函數接口實現具體服務功能即可。編譯后生成代碼在out/product/gen/drivers/interface/power中,接口代碼如下:

\

 (4)實現HDI接口 

● 實現UHDF Driver,用于將HDI實現加載為獨立進程,并基于HDF驅動框架發布設備服務。 

\

● 實現HDI接口

\

3. HDI使用 

通過上文的介紹,相信大家已經對HDI有了一定的了解,下面我們將為大家介紹HDI的使用,在直通模式下,對HDI接口調用為同一進程空間函數調用,過程較為直接,這里我們重點闡述IPC模式下的調用原理,然后通過CPP語言來展示電源子系統HDI的調用。

3.1 調用原理

在IPC模式下,當系統服務調用HDI接口時,通過proxy庫將函數調用轉換為IPC請求,將接口調用的參數進行序列化;IPC請求通過IPC框架發送到服務端,請求將被stub庫先處理,然后對接口調用的參數進行反序列化,再轉換成對服務實現的函數調用,從而實現接口調用過程。 

\

圖5 HDI調用過程

3.2 基于CPP語言的使用 

上文已經編譯生成了電源子系統的HDI接口,下面我們來看看如何使用CPP語言來調用HDI接口吧。

(1)客戶端在BUILD.gn中增加依賴: //drivers/interface/foo/v1.0:libfoo_proxy_1.0"

\ 

(2)在實現電源子系統的代碼中調用HDI接口,代碼如下:

 \

4. 結語

以上就是本文全部內容,我們在這里簡單介紹了HDI接口的實現思路及使用,對于廣大南向開發者,我們還在社區提供了詳細的HDI接口實現指導,歡迎大家在gitee社區參與更多討論。

關鍵詞:HDIOpenHarmony
主站蜘蛛池模板: 那曲县| 甘南县| 昭平县| 祁门县| 桓台县| 屏边| 绥阳县| 封开县| 扎兰屯市| 资源县| 方城县| 铅山县| 赤城县| 南安市| 图们市| 林州市| 双峰县| 靖安县| 古浪县| 延长县| 宜州市| 玉树县| 娄烦县| 南岸区| 无锡市| 始兴县| 临潭县| 新郑市| 桃江县| 抚州市| 华坪县| 蓬溪县| 邯郸县| 德保县| 桐梓县| 家居| 抚顺市| 彭阳县| 哈密市| 涟水县| 台东县|