OpenHarmony之HDI

HDI 介绍

HDI(Hardware Device Interface,硬件设备接口)是HDF驱动框架为开发者提供的硬件规范化描述性接口。通过规范化的设备接口标准,为系统提供统一、稳定的硬件设备操作接口。

HDI支持“IPC模式”及“直通模式”两种调用方式。

IPC模式即跨进程通信模式,基于binder机制实现,调用端通过Proxy代理库调用HDI接口,具备良好的解耦性和安全性,是标准系统的默认部署方式。

直通模式,将HDI实现为共享库,调用端使用dlopen加载HDI实现库并直接调用HDI接口,是小型系统的默认部署方式,同时还适用于对性能有特殊需求的标准系统模块。

img

HDI硬件设备接口为硬件的接入提供了统一的实现通路。屏蔽了硬件接口的具体实现,实现系统软件与硬件的架构解耦。让开发者专注于硬件接口的使用,从而简化开发过程,提升开发效率。

HDI 实现

下面主要介绍IPC模式下基于C/S(Client-Server客户端与服务端)结构的HDI接口实现,OpenHarmony的IPC也是基于Android的Binder机制。

IPC

进程间通信IPC(Inter-Process Communication)主要分为: 本地过程调用 LPC(Local Procedure Call)和远程过程调用 RPC(Remote Procedure Call) C/S架构

IDL

IDL(Interface Description Language)是一类用来描述接口的语言,通过一种中立的方式来定义客户端与服务端均认可的编程接口,可以实现在二者间的跨进程通信(IPC)。跨进程通信意味着可以在一个进程访问另一个进程的数据,或调用另一个进程的方法。通常把应用接口提供方(供调用)称为服务端,调用方称为客户端。

IDL先把需要传递的对象分解成操作系统能够理解的基本类型,然后根据接口声明编译,生成IPC/RPC代理(Proxy)和桩(Stub)的C/C++代码,从而为调用者提供一致的接口和调用方式。

img

基于IDL语言实现HDI接口

此章节略,后面会用专门的文档详细记录,这里只介绍一些概念和原理。

主要流程:

使用IDL语法编写 .idl 文件 -> 编写.idl 文件的编译脚本BUILD.gn -> 编译 .idl文件

主要目的:

使用编译工具 hdi-gen编译IDL文件,转换为C/C++语言的函数接口声明、客户端与服务端IPC相关过程代码

HDI 使用

直通模式过程比较直接,这里主要介绍IPC模式下HDI的调用

调用原理

在IPC模式下,当系统服务调用HDI接口时,通过proxy库将函数调用转换为IPC请求,将接口调用的参数进行序列化;IPC请求通过IPC框架发送到服务端,请求将被stub库先处理,然后对接口调用的参数进行反序列化,再转换成对服务实现的函数调用,从而实现接口调用过程。

img

例子

此章节略,后面会用专门的文档详细记录,这里只介绍一些概念和原理

总结

这里简单地介绍了HDI接口的一些概念和原理,详细的HDI接口实现指导可参见官方社区

参考

https://baijiahao.baidu.com/s?id=1731336189283472441