Android Binder IPC分析

1 . binder 通信概述

binder 通信是一种 client-server 的通信结构, 
1. 从表面上来看,是 client 通过获得一个 server 的代理接口,对 server 进行直接调用; 
2. 实际上,代理接口中定义的方法与 server 中定义的方法是一一对应的; 
3.client 调用某个代理接口中的方法时,代理接口的方法会将 client 传递的参数打包成为 Parcel 对象; 
4. 代理接口将该 Parcel 发送给内核中的 binder driver. 
5.server 会读取 binder driver 中的请求数据,如果是发送给自己的,解包 Parcel 对象,处理并将结果返回; 
6. 整个的调用过程是一个同步过程,在 server 处理的时候, client 会 block 住。 

2 . service manager
Service Manager 是一个 linux 级的进程 , 顾名思义,就是 service 的管理器。这里的 service 是什么概念呢?这里的 service 的概念和 init 过程中 init.rc 中的 service 是不同, init.rc 中的 service 是都是 linux 进程,但是这里的 service 它并不一定是一个进程,也就是说可能一个或多个 service 属于同一个 linux 进程。在这篇文章中不加特殊说明均指 android native 端的 service 。
任何 service 在被使用之前,均要向 SM(Service Manager) 注册,同时客户端需要访问某个 service 时,应该首先向 SM 查询是否存在该服务。如果 SM 存在这个 service ,那么会将该 service 的 handle 返回给 client , handle 是每个 service 的唯一标识符。

SM 的入口函数在 service_manager.c 中,下面是 SM 的代码部分 

int main(int argc, char **argv)
{
struct binder_state

猜你喜欢

转载自blog.csdn.net/qq_42894864/article/details/104717092