C程序Binder通讯分析及实例

Android系统中进程间通讯都是建立在Binder通讯基础上的,类似过往项目中使用的一些RPC通讯手段如(Corba、TinyRpc、DBus等)

Binder通讯中与Corba通讯相似,都需要Server、Client、和ServiceManager三种角色,Corba是以网络为载体基于TCP/IP的,Binder是基于Binder驱动的,Android系统中增加了一些虚拟驱动Ashm、Logger、Binder、LowMemoryKiller,Binder驱动尤为复杂。

首先Binder Service需要向ServiceManager去注册服务,流程如下

1.Binder Servier需要打开Binder驱动

2.Binder Server需要将Binder驱动得到的文件描述符进行映射

3.向驱动发送IOCTL读写消息

4.解析并处理消息

struct binder_state *binder_open(unsigned mapsize);定义在Binder.h中

返回的binde_state定义如下

struct binder_state
{
    int fd;
    void *mapped;
    unsigned mapsize;
};

参考Android源码中bctest的实现方式可以得到下面的过程

#define LOG_TAG "TEST_SERVER"
#include "binder.h"

const char* service_name = "test_server";
const unsigned int mapped_size = 1024;

int service_publish(struct binder_stat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值