详细图解 Android vndBinder

68 篇文章 14 订阅
12 篇文章 0 订阅

详细图解 Android vndBinder

注意:本文基于 Android 8.1 进行分析
Qidi 2020.07.03 (Markdown & Haroopad)


【前言】
图虽然是根据 vndBinder 的类关系和调用顺序画出的,但实际上对于 Binder 和 hwBinder 也适用。

Binder driver 代码十分庞杂,基于安全考虑还存在与 LSM 的交互,所以这部分的调用关系图有所省略。


【Binder 通信概要】
如果说 Binder 通信机制是 Android 的心脏(数据流动好似血液循环),那么 ServiceManager 进程就是 Binder 通信的核心。在 user-space 空间,ServiceManager 必须在任何 Binder 请求来临前启动。
在这里插入图片描述


【Binder 类关系】
Binder 机制的框架已经非常稳固,我们只需编写 *.hal 文件,在其中将自定义服务的接口描述清楚,再分别实现 Bp 和 Bn 端就可以了。
在这里插入图片描述


【ServiceManager 启动】
ServiceManager 是一个独立进程,根据/frameworks/native/cmds/servicemanager/servicemanager.rc配置,在设备上电时,它会随 system 组一起启动。
在这里插入图片描述


【获取 ServiceManager】
在你自己的进程中调用 IServiceManager::defaultServiceManager() 即可获得 IServiceManager Bp端实例。
在这里插入图片描述


【注册(添加)vndBinder 服务】
获得 IServiceManager Bp端实例后,调用 addService(name, yourServiceInstance) 即可实现注册。
在这里插入图片描述


【查询(获取)vndBinder 服务】
获得 IServiceManager Bp端实例后,调用 getService(name) 即可获取目标 Binder 服务的 Bp端实例。
在这里插入图片描述


【vndBinder 跨进程调用】
vndBinder 跨进程调用的逻辑与 addService() 和 getService() 酷似,区别只在于传入的 Command Code 不同,以及 Binder 驱动中执行的 switch…case… 也相应不同。略。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值