美文网首页
Binder 梳理

Binder 梳理

作者: Wi1ls努力努力再努力 | 来源:发表于2019-10-30 14:14 被阅读0次

Binder 驱动是 解析init.rc过程中,启动 ueventd 时,在 ueventd 的启动中,会解析 ueventd.rc 文件,此时就其注册 Binder 驱动,Ashmem 驱动等。

  • ProcessState对于一个进程是单例
  • 一个进程是在ProcessState.cpp 初始化的时候进行 open("/dev/binder"),mmap() 等操作,两者会在 kernal层 binder 驱动处执行 binder_open() 和 binder_mmap( )
  • ProcessState 在 open_drive()中打开 binder 驱动,随后通过 binder_ioctl( )与 Binder 驱动进行通信,查询并校验BinderVersion,设置 Binder 线程最大数量
  • binder_open( )会将打开驱动的进程信息构造为 binder_proc 结构体,并且挂载到 binder 驱动进行管理
  • binder_mmap( )会让 binder 驱动与打开驱动的驱动的虚拟地址共同映射到同一块物理内存。

  • service_manager.cpp 作为 service 的管理者,在 Binder 驱动中的编号为 0;
  • service_manager由解析init.rc后启动初始化
  • service_manager 使用同空间下的 binder.c,而不直接使用 kernal 中的 binder.c
  • service_manager在其 main()方法中,使用同空间下的 binder.c 打开 Binder 驱动,使用 binder_open( ),调用open("/dev/open")打开 binder 驱动,随后通过 ioctl 与 binder 驱动通信校验 Binder 版本号,然后通过 mmap()进行内存映射。
  • 随后通过 binder_become_context_manager( )想 binder 驱动申请成为上下文管理者。
  • 随后通过 binder_loop( )进入循环,通过 svcmgr_hander 进行处理请求

  • 网上将 Android Binder通信的架构类化成计算机网络,service_manager 视为DNS 等。
  • 在与 Binder 进行的通讯过程,可以认为是协议的层层包装和层层解包装。在每一层都会打包一个控制,在转交后通过解析控制命令,转到对应函数处理。

  • 像 service_manager 申请成为上下文管理者,在 iotcl( )中的 cmd 是 BINDER_SET_CONTEXT_MGR,在 binder_ioctl( )中case 匹配到,直接执行对应的方法。而大部分利用 Binder 是进行进程间通信的,其使用的 cmd 是BINDER_WRITE_READ。
  • defaultServiceManager()@IServiceManager.cpp
  • 对于 service_manager 的使用,分为 Java 层和 c++层。先来看 Java 层。
  • Java 层的 ServiceManager.getIServiceManager( )返回ServiceManagerProxy( )对象。link
  • 于是 Java 层中 service_manager 的代理表现为 ServiceManagerProxy.java(mRemote=BinderProxy.java(mObject=BpBinder.cpp(handle = 0)))
  • 于是 native 层的service_manager 的代理表现为BpManagerService.cpp(mRemote = BpBinder.cpp(handle = 0))
  • 于是可以知道,无论是 native 层还是 Java 层,都是对于 BpBinder.cpp(handle = 0 )的包装。所有对于 service_manager 通讯发出的请求最终都会由 BpBinder.cpp(handle = 0)来发出
  • Parcel 详解
  • 以添加服务为例子看整个 Binder 通讯过程

相关文章

  • Binder 梳理

    Binder 驱动是 解析init.rc过程中,启动 ueventd 时,在 ueventd 的启动中,会解析 u...

  • Binder梳理

    Binder原理是很清楚,但是调用细节每次看了又忘,好吧,干脆再写篇文章梳理一次,也方便之后查阅。 一、定义 Bi...

  • android binder 梳理

    一.Binder是Android系统进程间通信(IPC)方式之一。 为何选择binder呢? 1)数据拷贝次数少:...

  • Binder 机制-AIDL

    AIDL 概念 前面我们梳理了 Binder 机制,应该有个概念并且可以简单实现了 Binder 机制入门[htt...

  • Android Binder及其周边知识梳理

    IPC-概述与Android中的进程 IPC - Binder还要从Service说起 IPC -通过AIDL看B...

  • Binder驱动

    数据结构 binder_proc binder_thread binder_transaction binder_...

  • Android Binder

    Binder Binder是什么? Binder是一种进程间通信机制为什么是Binder? Binder架构 Bi...

  • Android framework学习索引

    binder基础 启动流程要求对于binder机制有了解,要有binder的学习基础binder机制https:/...

  • 跨进程通信而已,有这么难懂吗?

    / Binder架构的组成 / Binder框架有3个方面组成:Binder服务端、Binder驱动以及客...

  • 跨进程通信而已,有这么难懂吗?

    / Binder架构的组成 / Binder框架有3个方面组成:Binder服务端、Binder驱动以及客...

网友评论

      本文标题:Binder 梳理

      本文链接:https://www.haomeiwen.com/subject/oiuovctx.html