Android HIDL 简介

HIDL 介绍

  HIDL(HAL interface definition language),HAL 接口定义语言是用于指定 HAL 层和其用户之间的接口的一种接口描述语言(IDL)。HIDL 允许指定类型和方法调用。从更广泛的意义上来说,HIDL 是用于在独立编程的代码库之间通信的系统。

  HIDL 旨在用于进程间通信(IPC,Inter-Process Communication)。进程之间的通信经过 Binder 化。对于必须与进程相关联的代码库,还可以使用直通模式。

  HIDL 可指定数据结构和方法签名,这些内容会整理归类到接口中,而接口会汇集到软件包中。尽管 HIDL 具有一系列不同的关键字,C++ 和 JAVA 程序员对 HIDL 的语法并不陌生。此外,HIDL 使用 JAVA 风格的注释。

  以上是 Android 官网给出的介绍,估计是机翻,读起来很难搞~,超级别扭。网址:https://source.android.com/devices/architecture/hidl

  想要理解 HIDL 到底是做什么的,可以先看下 Android 为什么会引入 HIDL。

HIDL 目的

  HIDL 的目的是,可以在无需重新构建 HAL 的情况下替换框架。

  HIDL 的出现是为了服务 Treble 架构。在此之前,Framework 层的修改更新都需要连同 HAL 层代码重新编译。而 Android 发展非常迅猛,各大手机厂商和芯片厂商都在做,很多手机厂商都会维护它们自己的 BSP(Board Support Package),由于版本过多,Android 版本的碎片化也越来越严重,为了解决这个问题引入了 Treble 架构。
在这里插入图片描述

在这里插入图片描述

  之前,HAL 层是作为 so 文件存在,作为标准接口供 Framework 层调用,可以是 JNI,也可以是其他途径。Framework 层和 HAL 层是一个进程。
  现在,HAL 层用 HIDL 定义出来一个接口,作为一个服务,在系统启动时被加载注册,此时 Framework 层和 HAL 层是两个进程。当 Framework 层需要调用的时候是作为 client 端来请求服务,通过 Binder 实现 IPC。
  这样的实现使得 Framework 层和 HAL 层解耦,可以单独对 Android Framework 层进行更新,不需要再连同 HAL 层一起编译。

小结

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值