AIDL与HIDL

AIDL与HIDL

1.HIDL

HAL(Hardware Abstract Layer),是Google开发的Android系统里上层应用对底层硬件操作屏蔽一个软件层次,也就是硬件独立,Android系统不依赖于某一个具体的硬件驱动,而是依赖于HAL代码。通俗点就是上层的应用不用关心底层硬件具体如何工作的,只要向上层提供一个统一的接口即可。

官方简介大致表明了这么几个点:

HIDL是HAL接口定义语言,用来描述指定HAL与用户间的接口。
HIDL也可以定义为能被独立编译的代码库之间的通信系统。
HIDL用于进程间通信,进程间通信可称为Binderized(binder机制传送门)。
HIDL可指定数据结构和方法签名组织成接口从而汇集到软件包中。

HAL 层的工作:1. 需要为上层提供一个操作底层硬件的接口;2. 实现相应的操作底层硬件的代码。

而 HIDL 则是改变了之前上层直接调用 HAL 层的模式。而是将 HAL 层作为一个服务启动,当上层需要调用时是作为 client 来请求服务的。
  主要的区别就是由一个进程变为两个进程,因此进程间的通信(IPC)底层使用的是 Binder(不需要关注具体实现,已经封装好了)。
  好处是上层和 HAL 层解耦。另外,多进程调用同一个接口时,使用过去的方式会被映射到每个进程中,造成浪费,而使用现在的方式只会在一个进程空间中。

HIDL是HAL定义接口的语言,接口属于包。
HIDL包的根目录在hardware/interfaces 或者 vendor/vendorName上。
根据包的命名方式可以在根目录下形成其子目录,也就是包的名字和目录有着对应的关系。eg.如果存在下面这样子的包名android.hardware.example.extension.light@2.0,就一定会存在这样子的文件夹hardware/interfaces/example/extension/light/2.0。
在包目录下的.hal文件都必须包含对包的名称和版本的声明。如果存在types.hal文件,它只是定义包中每个接口都可以访问的数据类型。

2.AIDL

AIDL是一个缩写,全称是Android Interface Definition Language,也就是Android接口定义语言

AIDL中的定向 tag 表示了在跨进程通信中数据的流向,**其中 in 表示数据只能由客户端流向服务端, out 表示数据只能由服务端流向客户端,而 inout 则表示数据可在服务端与客户端之间双向流通。**其中,数据流向是针对在客户端中的那个传入方法的对象而言的。in 为定向 tag 的话表现为服务端将会接收到一个那个对象的完整数据,但是客户端的那个对象不会因为服务端对传参的修改而发生变动;out 的话表现为服务端将会接收到那个对象的的空对象,但是在服务端对接收到的空对象有任何修改之后客户端将会同步变动;inout 为定向 tag 的情况下,服务端将会接收到客户端传来对象的完整信息,并且客户端将会同步服务端对该对象的任何变动。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值