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发送数据(调用服务提供的函数来达到效果)。
网友评论