以下内容只大概列个提纲,若要明白其中细节,还请看源码:

申明:本人菜鸟,希望得到大神指点一二,余心足已

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

更多相关文章

  1. 卷二 Dalvik与Android源码分析 第二章 进程与线程 2.2 Dalvik线
  2. Android(安卓)内核安全机制-selinux简介
  3. Android(安卓)跨进程通信基础
  4. IBinder对象在进程间传递的形式(二)
  5. 如何防止android app被kill
  6. Android跨进程通信IPC之2——Linux的跨进程通信详解
  7. 解决Android数据库锁的问题
  8. Android进程间通信(二):通过AIDL介绍Binder的工作机制
  9. 在android中使用USB进行通信的4种方法

随机推荐

  1. Intent实现Android间的页面跳转
  2. 修改官方Twitter For Android,自定义 API
  3. Android中事件分发机制分析
  4. Android(安卓)LiveCD VirtualBox
  5. Android(安卓)google地图开发的前期准备(M
  6. Android系统启动流程(四)Launcher启动过程
  7. android LinearLayout布局子空间没有填充
  8. android SDK与ADT版本更新问题
  9. android String
  10. android 获取控件真实高度