回答几个Binder相关的问题

本文深入探讨了Binder机制,包括如何在客户端找到目标Binder、唤醒服务端线程的过程以及binder_proc中双红黑树的作用。通过service manager或bindService()获取服务,涉及进程间通信与权限检查。binder_ref红黑树用于快速查找引用对象,而一次拷贝原理优化了数据传输效率。
摘要由CSDN通过智能技术生成

这段时间花了很多的精力来研究binder相关的源码,恰巧看到一篇博文讲解了几个Binder相关的问题,问题提得很不错,弄清楚了这些问题之后对Binder的了解肯定会大大加深。(相关的链接是听说你Binder机制学的不错,来解决下这几个问题

这篇博文主要是根据我自己的理解来解答这些问题。分析的代码版本是7.1的。

Binder的定向制导,如何找到目标Binder,如何唤起进程或者线程

首先要明白一些背景知识。binder驱动程序代码中,每一个binder服务端都有对应的binder_node结构体,binder_node当中又包含了指向服务端实例的指针。为了描述客户端和服务端的一一对应的关系,又有了binder_ref结构体,即binder引用对象。这个binder_ref由客户端进程来管理的,客户端进程连接了几个binder服务端,该进程(binder_proc)中就会有多少个binder_ref。binder_ref当中又引用了对应的binder_node。也就是说,客户端进程想要与服务段作沟通,那么它必须先要找到对应的服务端在本进程中的binder_ref,然后通过binder_ref引用的binder_node找到服务端实例。

明白了以上这些,现在这个问题就可以转化成,如何在客户端进程内找到对应的服务端的binder引用对象(binder_ref)。事实上服务端启动后,也仅仅是在驱动中建立相应的binder_node,客户端进程当中是不存在binder_ref的,客户端想要找到这个binder_ref,首先还需要保

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值