• [Android Frameworks] native Binder and IMemory


    Binder核心库:

    Android 在native层(c/c++)提供了一种 IPC 机制 —— Binder,Binder的底层是通过共享内存来实现的,共享内存的 wrapper IMemory 也在 Binder 的工程里,而且是可以复用的,即如果想在 Android的 native 层使用共享内存,那么可以使用 IMemory 体系。

    源码路径:\frameworks\native\libs\binder

    头文件:\frameworks\native\libs\binder\include\binder\*

    Binder同时提供了 ndk 和 aidl ,因此同时存在 java 和 c++ 的api 。

    native头文件路径:#include , \frameworks\native\libs\binder\include\binder

    核心工程 libbinder 

    1. cc_library_shared {
    2. name: "libbinder",
    3. ...
    4. srcs: [
    5. "ActivityManager.cpp",
    6. "AppOpsManager.cpp",
    7. "Binder.cpp",
    8. "BpBinder.cpp",
    9. "BufferedTextOutput.cpp",
    10. "Debug.cpp",
    11. "IActivityManager.cpp",
    12. "IAppOpsCallback.cpp",
    13. "IAppOpsService.cpp",
    14. "IBatteryStats.cpp",
    15. "IInterface.cpp",
    16. "IMediaResourceMonitor.cpp",
    17. "IMemory.cpp",
    18. "IPCThreadState.cpp",
    19. "IPermissionController.cpp",
    20. "IProcessInfoService.cpp",
    21. "IResultReceiver.cpp",
    22. "IServiceManager.cpp",
    23. "IShellCallback.cpp",
    24. "IUidObserver.cpp",
    25. "MemoryBase.cpp",
    26. "MemoryDealer.cpp",
    27. "MemoryHeapBase.cpp",
    28. "Parcel.cpp",
    29. "ParcelFileDescriptor.cpp",
    30. "PermissionCache.cpp",
    31. "PermissionController.cpp",
    32. "PersistableBundle.cpp",
    33. "ProcessInfoService.cpp",
    34. "ProcessState.cpp",
    35. "Static.cpp",
    36. "Status.cpp",
    37. "TextOutput.cpp",
    38. "IpPrefix.cpp",
    39. "Value.cpp",
    40. ":libbinder_aidl",
    41. ],
    42. ...
    43. }

    ndk 工程 libbinder_ndk 

    1. cc_library {
    2. name: "libbinder_ndk",
    3. ...
    4. srcs: [
    5. "ibinder.cpp",
    6. "ibinder_jni.cpp",
    7. "parcel.cpp",
    8. "process.cpp",
    9. "status.cpp",
    10. "service_manager.cpp",
    11. ],
    12. shared_libs: [
    13. "libandroid_runtime_lazy",
    14. "libbase",
    15. "libbinder",
    16. "libutils",
    17. ],
    18. ...
    19. }
    20. ndk_library {
    21. name: "libbinder_ndk",
    22. symbol_file: "libbinder_ndk.map.txt",
    23. first_version: "29",
    24. }

    Context Manager 及 Service Manager 

    Context Manager 及 Service Manager 是android管理所有 Binder 服务的服务,所有服务的 Binder数据结构都在这个工程里。他和 各个Service 之间通过 /dev/binder 和 /dev/hwbinder 这两个驱动文件沟通。

    addService最终会把 service 的相关 metadata 保存在 这个工程里,而不是在 binder 驱动里。getService的查询便是在这个工程里查找 service 字符串,匹配上以后返回对应的服务实例的内存地址并转换为IBinder对象。

    代码路径:/frameworks/native/cmds/servicemanager/

    Binder Driver

    Binder Driver 是提供 /dev/binder 和 /dev/hwbinder 这两个设备文件的代码,具体的代码并不在AOSP中,而是在linux kernel 中,比如:

    https://android.googlesource.com/kernel/arm64/+/refs/tags/android-10.0.0_r0.88/drivers/android/binder.c

  • 相关阅读:
    三菱电子推出16W GaN PA,用于大规模MIMO
    Prometheus(二)基础概念
    阿里云服务器e系列是共享型?什么意思?
    Maven的作用
    简易根文件系统构建实验及过程详解
    Spring WebFlux使用函数式编程模型构建异步非阻塞服务
    windows下部署flask: apache+mod_wsgi问题汇总
    CSAPP-Lab04 Architecture Lab 深入解析
    解决编译错误 Could not find android.arch.navigation:navigation-fragment-ktx:2.3.1.
    IDEA插件开发(18)---通知
  • 原文地址:https://blog.csdn.net/ykun089/article/details/133985363