Binder系列1—Binder Driver初探

 

 

 

 

 

 

 

 

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
 

 

 

 

 

 

流程如下:

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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章