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系 ...
随机推荐
- Java8新特性之接口defualt,static方法
简介 作用 Java8中接口引入了defualt,static两种方法提供默认实现,彻底打破了接口不能有默认实现的规定 static 让接口类似于工具类,提供一些静态方法 static方法不会被子类继 ...
- [追热点]Rust学习资源整理
为什么选择Rust 在一次演讲中,谈到微软为解决相应内存问题所做的工作,微软研究人员 Matthew Parkinson 提到了微软正在开发的基于 Rust 的新编程语言 Verona. 摘自:[Ru ...
- border-box和CSS3 calc()解决盒模型加边框或边距后尺寸变大的问题
box-sizing box-sizing的CSS属性是用来改变默认的CSS框模型 属性 初始值:content-box 适用于:接受的所有元素的宽度或高度 继承:无 媒体:visual 指定的:as ...
- odoo开发安装插件教程小技巧
安装Odoo插件时而可能很繁琐且易于出现未知错误.当Odoo出现错误提示时.您需要深层次查询内核模块,安装其它依赖插件,下载全部插件,将它们放到恰当的部位,点安装,随后处理错误,然后再次测试,直至凡事 ...
- Android五大布局详解——TableLayout(表格布局)
TableLayout 前面所学的LinearLayout和RelativeLayout两大布局已经完全适用于各种开发条件下,其他的布局仅供参考学习,毕竟知识就是力量,以后的开发过程中万一遇到也能游刃 ...
- SpringCloud之Eureka:集群搭建
上篇文章<SpringCloud之Eureka:服务发布与调用例子>实现了一个简单例子,这次对其进行改造,运行两个服务器实例.两个服务提供者实例,服务调用者请求服务,使其可以进行集群部署. ...
- Solr实现全文搜索
1.1 Solr是什么? Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器.Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展 ...
- 一个diango项目的结构
一个项目的结构 day43项目 .idea 配置 pycharm自动帮配的配置,打开别人的diango项目时要先删了此项 app01 方便在一个大的Django项目中,管理实现不同的业务功能 migr ...
- C#中巧用妙法避免嵌套方式使用两个foreach循环
问题:需要对DataGridViewRow的下拉框列Item2所选内容进行判断,看是否跟数据库里面某个配置表的数据列Item1匹配.如果用两个foreach循环进行匹配,会导致逻辑复杂而且容易只bre ...
- MVC(实战一)
一.创建MVC项目 二.界面分布 Content:是存放css文件等,暂时先不考虑. Controllers:重要, 控制层,控制界面显示和界面逻辑的,其实真正业务逻辑层,建议分层出去. Models ...