android binder机制实现
2010-05-31 14:30:00 来源:WEB开发网struct binder_write_read {
signed long write_size;
signed long write_consumed;
unsigned long write_buffer;
signed long read_size;
signed long read_consumed;
unsigned long read_buffer;
};
struct binder_write_read { signed long write_size; signed long write_consumed; unsigned long write_buffer; signed long read_size; signed long read_consumed; unsigned long read_buffer; };
1.2 servicemanager部分 servicemanager是一个守护进程,用于这个进程的和/dev/binder通讯,从而达到管理系统中各个服务的作用。
可执行程序的路径:
/system/bin/servicemanager
开源版本文件的路径:
Java代码 < width="14" height="15" src="http://mintelong.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" pluginspage="http://www.macromedia.com/go/getflashplayer">
frameworks/base/cmds/servicemanager/binder.h
frameworks/base/cmds/servicemanager/binder.c
frameworks/base/cmds/servicemanager/service_manager.c
frameworks/base/cmds/servicemanager/binder.h frameworks/base/cmds/servicemanager/binder.c frameworks/base/cmds/servicemanager/service_manager.c
程序执行的流程:
open():打开binder驱动
mmap():映射一个128*1024字节的内存
ioctl(BINDER_SET_CONTEXT_MGR):设置上下文为mgr
进入主循环binder_loop()
ioctl(BINDER_WRITE_READ),读取
binder_parse()进入binder处理过程循环处理
binder_parse()的处理,调用返回值:
当处理BR_TRANSACTION的时候,调用svcmgr_handler()处理增加服务、检查服务等工作。各种服务存放在一个链表(svclist)中。其中调用binder_等开头的函数,又会调用ioctl的各种命令。
处理BR_REPLY的时候,填充binder_io类型的数据结
1.3 binder的库的部分
binder相关的文件作为Android的uitls库的一部分,这个库编译后的名称为libutils.so,是Android系统中的一个公共库。
更多精彩
赞助商链接