• [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

  • 相关阅读:
    学生用台灯哪个品牌比较好?推荐学生护眼台灯品牌
    考虑颜色信息的特征描述符----学习笔记
    2022年企业数字化技术应用 5 大趋势丨三叠云
    数据库同步有哪些方式?【怎么保障目标和源数据一致性】
    SQL语句理解问题请解答
    【Jmeter】生成html格式接口自动化测试报告
    【第49篇】Swin Transformer V2:扩展容量和分辨率
    Shel简介入门
    Python每日一练(牛客新题库)——第12天:循环语句
    echarts图表区间展示
  • 原文地址:https://blog.csdn.net/ykun089/article/details/133985363