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社群參與更多討論。
社群連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69997629/viewspace-2889164/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- HAL 硬體抽象層介紹抽象
- HTC VIVE Pro裝置引數配置介紹
- 硬體開發筆記(十九):Altium Designer 21軟體介紹和安裝過程筆記
- 硬體裝置上能執行小程式嗎?
- 智慧成人用品軟硬一體化裝置遙控
- 計算機網路由哪些硬體裝置組成?計算機網路路由
- 計算機(電腦)硬體組成基本介紹1計算機
- 計算機(電腦)硬體組成基本介紹3計算機
- 計算機(電腦)硬體組成基本介紹4計算機
- 硬體開發筆記(一):高速電路設計Cadence Aleego軟體介紹和安裝過程筆記Go
- QT硬體介面設計QT
- 【硬體】HDMI介面HPD原理
- Nacos 介面詳細介紹
- Linux單裝置多路USB串列埠的實現方法介紹Linux串列埠
- 迅雷鏈基於智慧硬體的DPoA共識機制介紹
- 打破平臺限制,小程式如何在硬體裝置上執行?
- .net core百萬裝置連線服務和硬體需求測試
- Halcon介面介紹 第二講
- Linux驅動開發筆記(四):裝置驅動介紹、熟悉雜項裝置驅動和ubuntu開發雜項裝置DemoLinux筆記Ubuntu
- 零程式碼零硬體玩轉華為雲IoT,基於裝置聯動實時監控裝置
- docker介紹、安裝Docker
- MySQL 安裝介紹MySql
- Go 安裝介紹Go
- 美顏SDK如何接入到硬體裝置實現美顏拍攝?
- SAP Cloud for Customer使用移動裝置訪問系統的硬體要求Cloud
- public interface View介面和public interface ViewResolver介面介紹View
- BMA456感測器介紹,設計用於可穿戴裝置
- 時統系統(時統裝置)詳細資料和介紹分享
- hadoop實戰3(web管理介面介紹及NN,DN,SNN介紹)HadoopWeb
- OpenHarmony 3.1 Release版本特性解析——OpenHarmony硬體資源池化架構介紹架構
- 伺服器內部主要幾種硬體以及它們的作用介紹伺服器
- 遠控介紹及介面編寫
- VSCode軟體介紹VSCode
- redis介紹與安裝Redis
- BookKeeper 介紹(2)--安裝
- Nginx 安裝配置介紹Nginx
- 安裝apache及介紹Apache
- RocketMQ 介紹與安裝MQ