Android的Binder机制阅读笔记
来源:互联网 发布:成语接龙查询软件 编辑:程序博客网 时间:2024/06/06 08:35
Binder采用了AIDL来描述进程间的接口。在实际实现中,Binder是作为一个特殊的字符型设备而存在的,其设备节点为/dev/binder。实际实现代码有以下两个文件实现。
kernel/drivers/staging/binder.hkernel/drivers/staging/binder.c
工作流程:
1、客户端首先获得服务器端的代理对象。
2、客户端通过调用服务器代理对象的方式向服务器端发送请求。
3、代理对象将用户请求通过Binder驱动发送到服务器进程。
4、服务器进程处理用户请求,并通过Binder驱动发送到服务器进程。
5、客户端收到服务端的返回结果。
所包含的数据结构
binder_work。表示在binder驱动中进程所要处理的工作项。
struct binder_work{ struct list_head entry; enum{ BINDER_WORK_TRANSACTION=1, BINDER_WORK_TRANSACTION_COMPLETE, BINDER_WORK_NODE, BINDER_WORK_DEAD_BINDER, BINDER_WORK_DEAD_BINDER_AND_CLEAR, BINDER_WORK_CLEAR_DEATH_NOTIFICATION }type;};
binder_node。定义Binder实体对象。在Android系统中,每一个Service组件在Binder驱动程序中都有一个Binder实体对象。
struct binder_node{ int debug_id; struct binder_work work; union{ struct rb_node rb_node; struct hlist_node dead_node; }; struct binder_proc *proc; struct hlist_head refs; int interanl_strong_refs; int local_weak_refs; int local_strong_refs; void __user *ptr; void __user *cookie; unsigned has_strong_ref:1; unsigned pending_strong_ref:1; unsigned has_weak_ref:1; unsigned pending_weak_ref:1; unsigned has_async_transaction:1; unsigned accept_fds:1; unsigned min_priority:8; struct list_head async_todo;}
binder_ref用于描述一个Binder引用对象。在Android系统中,每一个Client组件在Binder驱动程序中都有一个Binder引用对象。
struct binder_ref{ int debug_id; struct rb_node rb_node_desc; struct rb_node rb_node_node; struct hlist_node node_entry; struct binder_proc *proc; struct binder_node *node; uint32_t desc; int strong; int weak; struct binder_ref_death *death;}
binder_ref_death是一个通知结构体,只要某进程对某binder引用订阅了其实体的死亡通知,那么binder驱动将会为该binder引用建立一个binder_ref_death通知结构体,将其保存在当前进程的对应binder引用结构体的death域中。
struct binder_ref_death{ struct binder_work work; void __user *cookie;}
binder_buffer用于描述一个内核缓冲区,能够在进程之间传输数据。
struct binder_buffer{ struct list_head entry; struct rb_node rb_node; unsigned free:1; unsigned allow_user_free:1; unsigned async_transaction:1; unsigned debug_id:29; struct binder_transaction *transaction; struct binder_node *trraget_node; size_t data_size; size_t offsets_size; uint8_t data[0];}
- entry:构建一个双向链表;
- rb_node:表示一个红黑树节点;
- transaction:用于中转请求和返回结果;
- target_node:表示一个目标节点;
- data_size:表示数据的大小;
- offsets_size:表示一个偏移量;
- data[0]:用于存储实际数据。
binder_proc表示正在使用Binder进程通信机制的进程,能够保存调用Binder的各个进程或线程信息,如线程ID、进程ID、Binder状态信息等。
0 0
- Android的Binder机制阅读笔记
- android binder机制 阅读笔记
- 《老罗的Android之旅》阅读笔记——IPC机制Binder
- 关于Android中的BInder机制的笔记
- android的binder机制
- Android的Binder机制
- android的binder机制
- android Binder机制2---Binder的数据结构以及Binder驱动
- Android的Binder机制浅析
- Android的Binder机制浅析
- android的binder机制研究
- 有关android 的Binder机制
- Android的Binder机制浅析
- Android系统的Binder机制
- Android系统的Binder机制
- Android系统的Binder机制
- Android的IPC机制-Binder
- Android的Binder机制浅析
- SVN及Eclipse集成插件SVN
- leetcode-java-189. Rotate Array
- 带你重新认识:Android Splash页秒开 Activity白屏 Activity黑屏
- Android网络编程(一)HTTP协议原理
- RMQ算法
- Android的Binder机制阅读笔记
- Toast.makeText(消息模式)的几种用法
- 文章标题
- 平衡二叉树
- 各种排序方法
- 我的第一个JAVA程序
- 安卓listview,GridView全选反选以及删除操作
- Eclispe清除项目缓存无需删除.metadata文件
- Codeforces Round #276 (Div. 2)-C. Bits