android binder 进程间通信机制1-binder 驱动程序
以下内容只大概列个提纲,若要明白其中细节,还请看源码:
申明:本人菜鸟,希望得到大神指点一二,余心足已
binder 设备:/dev/binder
binder 进程间通信涉及的四个角色:
Client Service ServiceManager Binder驱动程序
一,Binder驱动程序
源码位置:kernel/[vendor]/[codename]/drivers/staging/android/binder.c
kernel/[vendor]/[codename]/drivers/staging/android/binder.h
等等相关文件。
1.基础数据结构
struct binder_work : 描述待处理的工作项
struct binder_node: 描述一个binder实体对象,每一个Service组件在Binder驱动程序中都对应一个Binder实体对象,用来描述它在内核中的状态。
struct binder_ref_death: 描述一个Service组件的死亡接收通知
struct binder_ref : 描述一个Binder引用对象,每一个Client组件在Binder驱动程序中都对应有一个Binder引用对象,用来描述它在内核中的状态。
struct binder_buffer : 描述一个内核缓冲区,用来在进程间传输数据。每一个使用Binder进程间通信机制的进程,在Binder驱动程序中都有一个内核缓冲区列表,用来保存Binder驱动程序为它分配的内核缓冲区。
struct binder_proc : 用来描述一个正在使用Binder通信机制的进程,在进程调用open打开/dev/binder时,Binder驱动程序为进程创建该该结构体。
struct binder_thread : 描述Binder线程池中的一个线程。
struct binder_transaction : 描述进程间通信过程
struct binder_write_read : 描述进程间通信过程中传输的数据,包括输入和输出数据。
enum BinderDriverCommandProtocol : 定义了输入(Binder驱动)的命令协议代码,在向Binder写数据时使用。
enum BinderDriverReturnProctocol: 定义了输出(Binder驱动)的返回协议代码,在从Binder读返回结果时使用。
struct binder_ptr_cookie : 描述一个Binder实体对象或一个Service组件的死亡接收通知。
stuct binder_transaction_data : 描述进程间通信过程中所传输的数据,会作为命令协议代码BC_TRANSACTION和BC_REPLY的参数使用。
2.Binder 使用流程:
初始化:binder_init
在目标设备上创建/proc/binder/proc目录
每一个使用Binder机制通信的进程都在该目录下有对应的文件,通过该文件可以读取到进程的Binder线程池,Binder实体对象,Binder引用对象及内核缓冲区等信息
还创建了 state states transactions transaction_log failed_taransaction_log 文件,记录Binder驱动程序运行情况。
Binder设备打开: binder_open
为进程创建binder_proc结构体,并加入到全局hash队列binder_procs中。
Binder设备文件内存映射:binder_mmap
为进程分配内核缓冲区,以便它可以用来传输进程间通信数据。
3. 内核缓冲区的管理:
分配内核缓冲区:binder_alloc_buf
释放内核缓冲区:binder_free_buf
查询内核缓冲区:binder_buffer_lookup
android binder 进程间通信机制1-binder 驱动程序的更多相关文章
- android binder 进程间通信机制2 - Binder进程间通信库实现原理
1.Service组件 使用模板类BnInterface描述,称为Binder本地对象,对应于Binder驱动程序中的Binder实体对象 实现原理图如下:
- [置顶] 深入理解android之IPC机制与Binder框架
[android之IPC机制与Binder框架] [Binder框架.Parcel.Proxy-Stub以及AIDL] Abstract [每个平台都会有自己一套跨进程的IPC机制,让不同进程里的两个 ...
- android binder 进程间通信机制6-Binder进程间通信机制的JAVA接口
Binder间进程通信的JAVA层接口,主要是通过JNI方法来调用Binder库的C/C++接口 在JAVA层,将Service组件称为JAVA服务,Service组件的代理称为JAVA服务代理. 一 ...
- android binder 进程间通信机制3-Binder 对象生死
以下概述Binder通信过程中涉及到的四个对象:Binder本地对象.Binder实体对象.Binder引用对象.Binder代理对象的生死. 1.Binder通信的交互过程 1.Client 进程发 ...
- android binder 进程间通信机制5-Service注册和代理对象的获取
ServiceManager,其实也是一个Service,不过它的Server端实现并未使用Binder库的结构实现,而是直接打开binder/dev进行通信的,不具有普遍性. 下面以MediaSer ...
- android binder 进程间通信机制4-Service Manager
Service Manager 是Binder进程间通信的核心组件之一: 它扮演者Binder进程间通信上下文(Context Manager)的角色 负责管理系统中的Service组件 向Clien ...
- Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6642463 在前面几篇文章中,我们详细介绍了A ...
- Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6633311 在上一篇文章中,我 们分析了And ...
- Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6629298 在前面一篇文章浅谈Android系 ...
随机推荐
- 如何把Mybatis的Mapper.xml配置文件和dao接口放在同一个包下
有的时候我们在Maven项目中写关于Mybatis的项目时,会涉及到很多的实体类,也就会涉及到很多的dao接口,如果此时我们仍然把dao接口和xml写在同一个包下,会让项目接口变得很乱,杂七杂八的,所 ...
- CRC校验算法的实例解析
概念 CRC校验算法,说白了,就是把需要校验的数据与多项式进行循环异或(XOR), 进行XOR的方式与实际中数据传输时,是高位先传.还是低位先传有关.对于数据 高位先传的方式,XOR从数据的高位开 ...
- 【HNOI 2019】JOJO
Problem Description JOJO 的奇幻冒险是一部非常火的漫画.漫画中的男主角经常喜欢连续喊很多的「欧拉」或者「木大」. 为了防止字太多挡住漫画内容,现在打算在新的漫画中用 \(x\) ...
- Docker 底层技术与端口映射
容器底层实现技术 1.cgroup 实现了资源的限额:CPU,内存,硬盘 cgroup使用 docker run -d -m 100M httpd 2.namespace 实现了资源隔离 name ...
- varnish实现缓存加速
varnish实现缓存加速 一.采用varnish为nginx实现缓存加速1.实验环境:(1)一台varnish缓存服务器,一台nginx服务器(2)关闭防火墙和selinux2.配置varnish( ...
- Java之System类
System类概述 java.lang.System 类中提供了大量的静态方法,可以获取与系统相关的信息或系统级操作,在System类的API文档中,常用的方法有: public static lon ...
- 第04组 Beta冲刺(4/4)
队名:斗地组 组长博客:地址 作业博客:Beta冲刺(4/4) 各组员情况 林涛(组长) 过去两天完成了哪些任务: 1.分配展示任务 2.收集各个组员的进度 3.写博客 展示GitHub当日代码/文档 ...
- BootStrap 关于input与btn的点击focus取消特效相关css
取消btn按钮点击出现的外边框: .btn:focus, /*清除btn按钮点击出现的边框*/.btn:active:focus,.btn.active:focus,.btn.focus,.btn:a ...
- windowsServer---- 在iis 上安装网站
1.找到信息服务IIS 管理器如图: 2.进入后进行配置 3.添加本地网站 配置网站 如果域名没有解析的话,可以在添加一个 端口用于测试 点击浏览就行查看 如果报错 解决:找到目录浏览,并启动 点击 ...
- Java 后台请求第三方系统接口详解
//调用第三方系统接口 PrintWriter out = null; BufferedReader in = null; JSONObject jsonObject = null; Closeabl ...