源码请看:
1)内核驱动部分:drivers/staging/android/
2)用户空间部分:frameworks/base/libs/binder/; frameworks/base/include/binder/;frameworks/base/cmds/servicemanager/
Binder起源于BeOS
操作系统,像COM一样提供
RPC/IPC 机制,OpenBinder是它的开源实现。Android's Binder
受OpenBinder的启发,是Binder的子集的一个重新实现。
Binder
在传统的OS上提供面向对象的远程调用和消息传递机制,遵循客服端/服务器编程模式。远程服务以面向对象的方式封装,可以任何语言实现,每个服务可以有自己独立的进程,也可以共享进程。客户端只需获取远程服务的句柄,然后可以向本地对象一样调用。
通过Binder提供系统服务:
Binder的实现主要分为两部分:内核层Binder 驱动,主要实现不同进程之间通信;用户层:主要提供内核层api封装,以及向上提供面向对象的IBinder的实现,提供ServiceManager的实现,方便服务的注册和统一管理,提供用户层的缓存,规范了服务的实现模式,以及客服端调用服务的模式。
Binder目前支持的通信命令有:BINGER_WRITE_READ, BINDER_SET_MAX_THREADS, BIND_SET_CONTEXT_MGR, BINDER_THREAD_EXIT, BINDER_VERSION.
针对BINDER_WRITE_READ,次级的命令有:
读取时返回的命令:
BR_CLEAR_DEATH_NOTIFICATION_DONE, BR_FAILED_REPLY
BC_REPLY,BC_ACQUIRE_RESULT, BC_INCREFS,BC_ACQUIRE, BC_RELEASE,
BC_DEAD_BINDER_DONE,
命令交互图的例子:
用户空间类图: