Binder驱动理解

Posted diffx

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Binder驱动理解相关的知识,希望对你有一定的参考价值。

1、Binder的三层架构

技术图片

2、BC、BR的理解

通信模型

技术图片

Binder协议包含在IPC数据中,分为两类:

  • BINDER_COMMAND_PROTOCOL:binder请求码,以”BC_“开头,简称BC码,用于从IPC层传递到Binder Driver层;
  • BINDER_RETURN_PROTOCOL :binder响应码,以”BR_“开头,简称BR码,用于从Binder Driver层传递到IPC层;

通信过程

技术图片

3、mmap原理(内存机制)

技术图片

虚拟进程地址空间(vm_area_struct)和虚拟内核地址空间(vm_struct)都映射到同一块物理内存空间。当Client端与Server端发送数据时,Client(作为数据发送端)先从自己的进程空间把IPC通信数据copy_from_user拷贝到内核空间,而Server端(作为数据接收端)与内核共享数据,不再需要拷贝数据,而是通过内存地址空间的偏移量,即可获悉内存地址,整个过程只发生一次内存拷贝。一般地做法,需要Client端进程空间拷贝到内核空间,再由内核空间拷贝到Server进程空间,会发生两次拷贝。

为什么不让发送端和接收端直接映射到同一个物理空间,这样连一次复制都不需要了?

答:多进程的同步问题复杂,android选择这个选择是基于速度和安全性的考虑。

Binder进程间通信的数据流程图:

技术图片

以上是关于Binder驱动理解的主要内容,如果未能解决你的问题,请参考以下文章

细读《深入理解 Android 内核设计思想》Binder 机制 [上]

细读《深入理解 Android 内核设计思想》Binder 机制 [上]

Binder 驱动

Android binder 机制驱动核心源码详解

Android:安卓学习笔记之Binder 机制的简单理解和使用

Android:安卓学习笔记之Binder 机制的简单理解和使用