Binder机制-01

2020-05-15  本文已影响0人  我和你说过

Binder机制的模型图

binder_01.png

ServiceManager (中间件-注册服务-获取服务)

1. 流程解析
1、open驱动 (打开dev/binder节点文件)
2、告诉驱动进程自己的身份(也就是binder驱动进程中会有ServiceManager的信息)
3、while() 循环 {
    读binder驱动的节点文件,
    获取数据(没有数据的时候会阻塞)
    解析数据
    判断数据{
          if(注册服务)->在链表中你那个记录服务名
          if(获取服务)->在链表中获取服务,存在就返回Service进程的handle
    }
}
2. 代码流程
binder_open()

Service(提供服务的进程)

1、open驱动 (打开dev/binder节点文件)
2、向ServiceManager注册服务(在一个链表中记录服务名)
3、while() 循环{
     读驱动(dev/binder的节点文件)//Client进程中会有Service进程的Handle,它是Client进程向Service进程发送数据的。
     解析数据//解析Client进程发送过来的数据
     调用对应函数实现相关操作
}

Client(获取服务的进程)

1、open驱动 (打开dev/binder节点文件)
2、获取服务:
         a.向ServiceManager查询需要的服务(通过参数中的服务名)
         b.获取相应的服务的一个Handle
3、向handle发送数据(调用服务提供的函数来达到效果)。
上一篇 下一篇

猜你喜欢

热点阅读