• 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

  • 相关阅读:
    Springboot整合activeMq
    linux下安装activeMq
    linux下配置jdk
    thinkphp5 集成 redis
    linux下安装redis
    tp5集成swagger
    lombok
    idea下springboot环境搭建
    Mac环境下maven安装配置
    idea环境下搭建swagger2接口文档
  • 原文地址:https://www.cnblogs.com/zj2012zy/p/4042557.html
Copyright © 2020-2023  润新知