Binder系列1—Binder Driver初探_第1张图片

 

Binder系列1—Binder Driver初探_第2张图片

 

 

 

 

 

Binder系列1—Binder Driver初探_第3张图片

 

Binder系列1—Binder Driver初探_第4张图片

 

android6.0

kernel/drivers/ (不同Linux分支路径略有不同) - staging/android/binder.c - android/binder.c

./work/android-5.0.2/frameworks/native/cmds/servicemanager/binder.c
./work/linux-3.0.86/drivers/staging/android/binder.c
 

 

Binder系列1—Binder Driver初探_第5张图片

 

Binder系列1—Binder Driver初探_第6张图片

 

Binder系列1—Binder Driver初探_第7张图片

 

Binder系列1—Binder Driver初探_第8张图片

 

流程如下:

IPC 

Zygote socket

Client      Server      ServiceManager binder

Service Server

Service Manager

binder_init

misc_register

binder_open

binder_mmap

void *start,void *end,

物理空间映射到虚拟进程空间

binder_ioctl

binder_get_thread

binder_ref ->BpBinder

binder_node->BnBinder

binder_transaction_data


write_buffer->BC_TRANSACTION

read_buffer->BR_TRANSACTION  write_buffer->BC_TRANSACTION

  union {
        struct {
            binder_uintptr_t    buffer; //数据区起始地址
            binder_uintptr_t    offsets; //数据区IPC对象偏移量
        } ptr;
        __u8    buf[8];
    } data;   //RPC数据


flat_binder_object


struct binder_transaction_data {
    union {
        __u32    handle;       //binder_ref(即handle)->BpBinder(客户端)
        binder_uintptr_t ptr;     //Binder_node的内存地址 - >BnBinder(服务端)
    } target;  //RPC目标

}

binder_ref ->BpBinder

binder_node->BnBinder


binder_transaction

 

 

3. 源码附录

本文基于Linux 4.4源码, 从上之下, 整个Binder架构所涉及的总共有以下5个目录:

/framework/base/core/java/               (Java)/framework/base/core/jni/                (JNI)/framework/native/libs/binder            (Native)/framework/native/cmds/servicemanager/   (Native)/kernel/drivers/android                  (Driver)

(1)Java framework

/framework/base/core/java/android/os/      - IServiceManager.java    - ServiceManager.java    - ServiceManagerNative.java    - IInterface.java    - IBinder.java    - Parcel.java    - Binder.java      - IHwInterface.java    - IHwBinder.java    - HwParcel.java    - HwBinder.java    - HwRemoteBinder.java/framework/base/core/jni/        - AndroidRuntime.cpp    - android_os_Parcel.cpp    - android_util_Binder.cpp    - android_os_HwParcel.cpp    - android_os_HwBinder.cpp    - android_os_Parcel.h    - android_util_Binder.h    - android_os_HwParcel.h    - android_os_HwBinder.h

(2)Native framework

/framework/native/libs/binder             - IServiceManager.cpp    - Interface.cpp    - Binder.cpp    - BpBinder.cpp    - Parcel.cpp    - IPCThreadState.cpp    - ProcessState.cpp/framework/native/libs/binder/include/binder    - IServiceManager.h    - Interface.h    - Binder.h    - BpBinder.h    - Parcel.h    - IPCThreadState.h    - ProcessState.h    - BinderService.h/framework/native/cmds/servicemanager/    - service_manager.c    - binder.c    - binder.h

(3)Kernel

/kernel/drivers/android/    - binder.c    - binder_alloc.c    - binder_alloc.h/kernel/include/uapi/linux/android/    - binder.h

 

 

 

更多相关文章

  1. Android之数据存入SD卡中
  2. Android get+post传值获取php服务端的json数据
  3. android 常用数据库字段描述
  4. 萝卜小姐-Handler之系列sendMessage学习
  5. kotlin入门系列二---基本语法
  6. android raw 文件下写入数据库
  7. Android 2.2 API 中文文档系列(3) —— AccessibilityService

随机推荐

  1. Android 使用 OpenCV (JNI 实现)
  2. 关于Android向前兼容和向后兼容问题的理
  3. Android(安卓)图标ICO设计标准与原则
  4. Activity生命周期
  5. Android手机软件汉化教程---第二课 arsc
  6. Android(安卓)高仿新浪微博底部导航栏,实
  7. Android 下交叉编译使用(Android NDK 默认
  8. Android进程管理机制及优化(HTC&其它可参
  9. android的wifi网卡移植详细过程已经通用
  10. Android的Activity屏幕切换动画||Gesture