Android Binder通信02 - 驱动分析 - 架构介绍

一、前言:

上一篇文章介绍了Binder通信系统Framework(用户态)的架构,并且结合代码说明了下注册ServiceManager,注册服务,注册客户端,客户端和服务端通信的业务场景,本节我们继续深入挖掘下,Framework层调用响应API之后,驱动层(内核态)如何处理的,这才是Binder系统的精髓所在!

二、架构图:

在这里插入图片描述

  • 在内核态驱动里,会为每一个服务创建一个binder_node,记录了进程的信息,比如:binder_node.proc=server进程
  • ServiceManager启动时候,会在驱动层创建一个全局的binder_node保存到binder_context_mgr_node当中;其他进程都有一个BpServiceManager,它的BpBinder句柄是0,表示binder_context_mgr_node,所以,其他进程都是可以直接和ServiceManager通信的。
  • ServiceManager还会再驱动中创建一个binder_ref(是个红黑树),它是binder_node的引用;
  • ServiceManager在用户态创建一个服务链表svcinfo,里面保存了namehandle
  • ClientServiceManager查询某个服务的时候,只需要传入name(因为它好记,友好);
  • ServiceManager就在链表中根据name找到这个节点,将对应的handle(因为它不好记,但是它不容易重复)传给驱动层;
  • 驱动程序在ServiceManagerbinder_ref红黑树当中,根据handle这个键找到对应的binder_ref;
  • 由于binder_ref当中保存了自己是谁的引用,也就是binder_node,因此,我们就获得了binder_node,代表服务;
  • 再给Client创建新的binder_ref,驱动就返回一个handle(这里面是desc,从
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值