http://www.linuxidc.com/Linux/2011-07/39271p2.htm

4、Binder协议
Binder协议基本格式是(命令+数据),使用ioctl(fd, cmd, arg)函数实现交互。其中cmd传递命令,arg传递参数,不同的命令需要传递的参数不同。
4、1 Binder所有命令及其所对应的数据
BINDER_WRITE_READ: (S: 向Binder写入或读取数据,参数分两部分,读和写,先写后读。 )该命令向Binder写入或读取数据。参数分为两段:写部分和读部分。如果write_size不为0就先将write_buffer里的数据写入 Binder;如果read_size不为0再从Binder中读取数据存入read_buffer中。write_consumed和 read_consumed表示操作完成时Binder驱动实际写入或读出的数据个数。
参数: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;
      };
BINDER_SET_MAX_THREADS:该命令告知Binder驱动接收方(通常是Server端)线程池中最大的线程数。由于Client是并发向Server端发送请求的,Server端必须开辟线程池为这些并发请求提供服务。告知驱动线程池的最大值是为了让驱动在线程达到该值时不要再命令接收端启动新的线程。
参数:int max_threads;
BINDER_SET_CONTEXT_MGR:将当前进程注册为SMgr。系统中只能存在一个SMgr。只要当前的SMgr没有调用close()关闭Binder驱动就不能有别的进程可以成为SMgr。 
BINDER_THREAD_EXIT :通知Binder驱动当前线程退出了。Binder会为所有参与Binder通信的线程(包括Server线程池中的线程和Client发出请求的线程)建立相应的数据结构。这些线程在退出时必须通知驱动释放相应的数据结构。
BINDER_VERSION:获得Binder驱动的版本号。
其中常用的命令是BINDER_WRITE_READ。该命令的参数包括两部分数据:一部分是向Binder写入的数据,一部分是要从 Binder读出的数据,驱动程序先处理写部分再处理读部分。这样安排的好处是应用程序可以很灵活地处理命令的同步或异步。例如若要发送异步命令可以只填入写部分而将read_size置成0;若要只从Binder获得数据可以将写部分置空即write_size置成0;若要发送请求并同步等待返回数据可以将两部分都置上。
4.2 BINDER_WRITE_READ 之写操作
Binder写操作的数据时格式同样也是(命令+数据)。这时候命令和数据都存放在binder_write_read结构write_buffer域指向的内存空间里,多条命令可以连续存放。数据紧接着存放在命令后面,格式根据命令不同而不同。
Binder写操作支持的命令(cmd)
BC_TRANSACTION & BC_REPLY:BC_TRANSACTION用于写入请求数据;BC_REPLY用于写入回复数据。其后面紧接着一个 binder_transaction_data结构体表明要写入的数据。
arg:struct binder_transaction_data
BC_FREE_BUFFER:释放一块映射的内存。Binder接收方通过mmap()映射一块较大的内存空间,Binder驱动基于这片内存采用最佳匹配算法实现接收数据缓存的动态分配和释放,满足并发请求对接收缓存区的需求。应用程序处理完这片数据后必须尽快使用该命令释放缓存区,否则会因为缓存区耗尽而无法接收新数据。
BC_INCREFS & BC_ACQUIRE & BC_RELEASE & BC_DECREFS这组命令增加或减少Binder的引用计数,用以实强指针或弱指针功能。
arg:32位Binder引用号

转载于:https://blog.51cto.com/1881577/1093272

关于Binder的点点滴滴(二)相关推荐

  1. Android10.0 Binder通信原理(二)-Binder入门篇

    摘要:本节主要来讲解Android10.0 Binder的设计原理,如何设计一个Binder通信 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分 ...

  2. Android Binder机制(二) ------- 服务的实现

    服务分析 所谓服务,简单点就是不断的监听客户端的请求,然后处理并向客户端返回处理的结果.要实现这一功能,至少需要以下几点: 循环,我们的服务就是一个大循环,不断的监听客户发来的请求.(线程循环) 通讯 ...

  3. Android10.0 Binder通信原理(十一)-Binder总结

    摘要:本节主要来讲解Android10.0 Binder的通信原理总结 阅读本文大约需要花费17分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设 ...

  4. Android10.0 Binder通信原理(九)-AIDL Binder示例

    摘要:本节主要来讲解Android10.0 Binder中如何使用AIDL 阅读本文大约需要花费20分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平 ...

  5. Android10.0 Binder通信原理(八)-Framework层分析

    摘要:本节主要来讲解Android10.0 Binder 在Framework的使用分析 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,An ...

  6. Android10.0 Binder通信原理(七)-Framework binder示例

    摘要:本节主要来讲解Android10.0 Binder在Framework中的示例 阅读本文大约需要花费15分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Andr ...

  7. Android10.0 Binder通信原理(六)-Binder数据如何完成定向打击

    摘要:本节主要来讲解Android10.0 Binder的数据是如何完成定向打击 阅读本文大约需要花费30分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Androi ...

  8. Android10.0 Binder通信原理(五)-Binder驱动分析

    摘要:本节主要来讲解Android10.0 Binder的驱动层分析 阅读本文大约需要花费35分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Android的平台设计 ...

  9. Android10.0 Binder通信原理(四)-Native-C\C++实例分析

    摘要:本节主要来讲解Android10.0 Binder的Native层实例流程 阅读本文大约需要花费35分钟. 文章首发微信公众号:IngresGe 专注于Android系统级源码分析,Androi ...

最新文章

  1. 关于mina的setSendBufferSize体验
  2. .NET基础示例系列之二十:对图片的几种简单处理
  3. 学学python(4):面向对象及类,模块
  4. Android动态权限申请工具类非常好用包含9组危险权限
  5. 研究机构:苹果M1芯片代工订单占台积电5nm工艺25%产能
  6. 简单干净的C#方法设计案例:SFCUI.AjaxLoadPage()之一
  7. 三管齐下!TB 级文件的上传性能瞬间被优化 100 倍!
  8. python neo4j_在Python中使用Neo4j的方法
  9. Git命令之查看及设置用户名邮箱
  10. 安卓一键清理内存_豆豆清理大师免费下载-豆豆清理大师老年版 v1.0.0手机版
  11. SQL数据库学习,常用语句查询大全
  12. STM32驱动步进电机
  13. ceph集群安装报错解决方法
  14. 无法定位程序输入点dxgiget_无法定位程序输入点于动态链接库dxgi.dll上怎么解决?-51dll帮助...
  15. 全球与中国细胞推刮器市场现状及未来发展趋势
  16. Windows11 dev 回退到beta
  17. SpringBoot配置文件中spring.profiles.active配置详解
  18. 综合工具-DesignCompiler学习教程
  19. 什么叫做石英表_石英表和机械表区别是什么?
  20. 技巧心得:网络工程师考试大纲

热门文章

  1. C语言 函数递归例题解析
  2. 在MySQL数据库建立多对多的数据表关系
  3. verilator编译 更新文件的规则
  4. 【原理+实战+视频+源码】docker映射端口教程
  5. java线程池参数面试题,附赠复习资料
  6. 网易严选Java开发三面面经:南京黑马java培训怎么样
  7. 2.PHP利用PDO连接方式连接mysql数据库
  8. 2018.09.21 atcoder An Invisible Hand(贪心)
  9. org.apache.maven.archiver.MavenArchiver.getManifest
  10. 【p081】ISBN号码