IPC Binder
来源:互联网 发布:win10开机优化设置 编辑:程序博客网 时间:2024/05/14 15:32
它由Client、Server、Service Manager和驱动程序Binder四个组件构成
所有的服务都是向Service Manager注册一个binder_node节点,而它们添加服务的方式都是一样的,只有客户端使用服务的方式才不一样。整个流程分为:服务注册、服务检索、服务使用三个部分。
Service Manager在用户空间的源代码位于frameworks/base/cmds/servicemanager目录下,主要是由binder.h、binder.c和service_manager.c三个文件组成。Service Manager的入口位于service_manager.c文件中的main函数
服务端的处理:
service_manager.c中的binder_loop循环调用ioctl(bs->fd, BINDER_WRITE_READ, &bwr)然后使用函数svcmgr_handler循环处理从binder驱动中读取的binder_write_read结构数据,最后根据客户端传过来的rpc数据进行处理。
int svcmgr_handler(struct binder_state *bs,struct binder_txn *txn,struct binder_io *msg,struct binder_io *reply){
struct svcinfo *si;
uint16_t *s;
unsigned len;
void *ptr;
uint32_t strict_policy;
int allow_isolated;
if (txn->target != svcmgr_handle)
return -1;
strict_policy = bio_get_uint32(msg);
s = bio_get_string16(msg, &len);
if ((len != (sizeof(svcmgr_id) / 2)) ||memcmp(svcmgr_id, s, sizeof(svcmgr_id))) {
fprintf(stderr,"invalid id %s\n", str8(s));
return -1;
}
switch(txn->code) {
case SVC_MGR_GET_SERVICE:
case SVC_MGR_CHECK_SERVICE:
s = bio_get_string16(msg, &len);
ptr = do_find_service(bs, s, len, txn->sender_euid);
if (!ptr)
break;
bio_put_ref(reply, ptr);
return 0;
case SVC_MGR_ADD_SERVICE:
s = bio_get_string16(msg, &len);
ptr = bio_get_ref(msg);
allow_isolated = bio_get_uint32(msg) ? 1 : 0;
if (do_add_service(bs, s, len, ptr, txn->sender_euid, allow_isolated))
return -1;
break;
case SVC_MGR_LIST_SERVICES: {
unsigned n = bio_get_uint32(msg);
si = svclist;
while ((n-- > 0) && si)
si = si->next;
if (si) {
bio_put_string16(reply, si->name);
return 0;
}
return -1;
}
default:
ALOGE("unknown code %d\n", txn->code);
return -1;
}
bio_put_uint32(reply, 0);
return 0;
}
android服务框架分为native service framework和java service framework层
- IPC Binder
- binder IPC
- IPC Binder
- Binder IPC 机制
- IPC 机制Binder 剖析
- IPC binder 机制历史
- Android Binder IPC分析
- Android Binder IPC分析
- Android Binder IPC分析
- Binder IPC机制
- android IPC---Binder
- Android Binder IPC分析
- Android Binder IPC
- Binder Android IPC Linux
- Android Binder IPC
- android binder ipc
- Binder IPC Mechanism
- Android Binder IPC分析
- 微软正式推出 Spartan 斯巴达浏览器
- 解决Eclipse添加新server时无法选择Tomcat7的问题
- 23种设计模式之备忘录模式
- 通过JNI接口在Android中调用C/C++代码
- Android来电铃声设置
- IPC Binder
- 刷屏评论
- myeclipse安装svn插件
- ORACLE EBS常用表及查询语句(二)
- Java NIO使用及原理分析(二)
- 产品经理如何入门,没人带的情况下如何学习?
- ios计算个税方法以及ui界面设计代码详解
- Web工程和引用工程的CLASSPATH下存在同一个配置文件,例如test.properties,部署后会加载哪个?
- RMAN BACKUP ... PLUS ARCHIVELOG & ORA-19809