binder hwbinder vndbinder

简介: binder hwbinder vndbinder

一直以来,供应商进程都使用 Binder 进程间通信 (IPC) 技术进行通信。在 Android 8 中,/dev/binder 设备节点成为框架进程的专有节点,这意味着供应商进程无法再访问此节点。供应商进程可以访问 /dev/hwbinder,但必须将其 AIDL 接口转为 HIDL接口。对于想要继续在供应商进程之间使用 AIDL 接口的供应商,Android 会按以下方式支持 Binder IPC。

 

Android 8 支持供 供应商服务使用的新 Binder 域,访问此域需要使用 /dev/vndbinder(而非 /dev/binder)。添加 /dev/vndbinder 后,Android 现在拥有以下 3 个 IPC 域:

dev/binder

这个是我们最熟悉的Binder,App开发中,ActivityManagerService用的都是这个,Java继承Binder,C++中继承Bbbinder,然后通过servicemanager进程注册实名Binder,然后通过已经创建好的Binder接口传递匿名Binder对象,拿到BinderProxy或者BpBinder以后,就可以Binder通信了。

dev/vndbinder

其实dev/vndbinde和dev/binder使用方式基本一样而且是共用一套Binder SDK,也是Java继承Binder,C++中继承Bbbinder,通过vndservicemanager进程注册实名Binder,然后通过已经创建好的Binder接口传递匿名Binder对象,拿到BinderProxy或者BpBinder以后,就可以Binder通信了。如何在使用同一套Binder SDK的代码,最后访问的设备节点变成dev/vndbinder,servicemanager变成vndservicemanager。


其实只要在你这个进程初始化的时候执行下面这个代码即可

ProcessState::initWithDriver("/dev/vndbinder");

dev/binder和dev/vndbinder无法在一个进程中同时使用

dev/hwbinder

硬件接口binder


为什么会引入 HwBinder?


HwBinder 引入的本质还是 Treble 机制的使用,这使得 system 和 vendor 分区相互隔离。在 Android 8.0 之前,Android HAL 与系统框架是紧耦合的,它们打包在一个镜像里。HAL只是一个个的so库,framework 通过打开动态库来调用 HAL。 为了适配 HwBinder,Android 8.0 同时引入了 HIDL,用于建立 framework 和 HAL 间的通信。


经过这个改变后,HAL 可以同时服务于 system 和 vendor。而 HAL 的实现位于 vendor 分区,通过 HwBinder 可以确保 system 和 vendor 独立升级,而不会影响 HAL 的调用。

HIDL是什么

假如Android官方定义了一个ILight.hal的HAL层接口

Interface ILight {
 
void turnOn();
 
void turnOff();
 
}

通过编译会自动生成如下两个类LightServer和LightClient的java对象和c++对象。


供应商只需要简单的继承LightServer,并实现turnOn和turnOff的抽象方法,就可以完成Light接口的实现,以及Light服务注册到hwservicemanager。


需要使用ILight接口的进程,只需要调用LightClient的turnOn和turnOff接口,就可以完成从hwservicemanager获得Light服务的Proxy对象,以及ILight的接口调用。


目录
相关文章
|
机器学习/深度学习 Java Linux
深入理解Binder
深入理解Binder 一句话概括进程通信:进程间的数据传递。 Binder是Anroid系统里最重要的进程通信方式,很多文章会直接用代码、原理类的文字进行描述,对于接触Android与Linux不是特别深的人来说,特别晦涩难懂,经常是看了这忘了那里,其实探索Binder通信的一条核心就是:Client如何找Server,将请求发送给Server,Server再将结果返回给Client。
1884 0
|
7月前
|
消息中间件 缓存 安全
Binder
Binder
44 1
Binder
|
Android开发
【Android Binder 系统】一、Binder 系统核心 ( IPC 进程间通信 | RPC 远程调用 )
【Android Binder 系统】一、Binder 系统核心 ( IPC 进程间通信 | RPC 远程调用 )
206 0
【Android Binder 系统】一、Binder 系统核心 ( IPC 进程间通信 | RPC 远程调用 )
|
索引
Binder交互浅析
Binder交互浅析
115 0
【Binder 机制】Native 层 Binder 机制分析 ( binder_loop | svcmgr_handler | binder.c | binder_parse )
【Binder 机制】Native 层 Binder 机制分析 ( binder_loop | svcmgr_handler | binder.c | binder_parse )
173 0
|
Android开发
【Binder 机制】Native 层 Binder 机制分析 ( service_manager.c | 开启 Binder | 注册 Binder 进程上下文 | 开启 Binder 循环 )(二)
【Binder 机制】Native 层 Binder 机制分析 ( service_manager.c | 开启 Binder | 注册 Binder 进程上下文 | 开启 Binder 循环 )(二)
254 0
|
Android开发
【Binder 机制】Native 层 Binder 机制分析 ( service_manager.c | 开启 Binder | 注册 Binder 进程上下文 | 开启 Binder 循环 )(一)
【Binder 机制】Native 层 Binder 机制分析 ( service_manager.c | 开启 Binder | 注册 Binder 进程上下文 | 开启 Binder 循环 )(一)
235 0
【Binder 机制】Native 层 Binder 机制分析 ( 查找 Binder 服务 | svcmgr_handler | do_find_service )
【Binder 机制】Native 层 Binder 机制分析 ( 查找 Binder 服务 | svcmgr_handler | do_find_service )
139 0
|
Java 网络协议 安全
彻底弄懂binder与aidl
aidl与binder机制 为什么需要binder 没有用到binder之前,我们每个app生活在分配给自己的虚拟机和内存空间中,这样保证了app应用的安全,到很多时候我们需要用到跨进程通信(IPC),这时binder就为此而生。
2293 0
|
Android开发 数据格式 Java
Android--进程间通信(Binder)
Android系统提供了一些通用服务,比如音乐打电话发短信,WIFI,定位,输入法,传感器等。应用程序与这些通用服务运行在不同的进程中,如果应用程序想要与这些通用服务交互就要涉及到进程间通信,Binder就是为了Android进程间通信而设计的。
1435 0