
binder
文章平均质量分 92
蒋八九
read the fucking source code
展开
-
binder机制原理分析(一):ServiceManager 进程启动
前言:要讲解分析binder,最好是从SM的启动开始分析讲解,不然就会感觉总有黑洞没有探索,会总惦记着,感觉缺少点啥;ServiceMangerd的启动主要分为3步骤:通过binder_open方法打开binder设备驱动文件,然后通过mmap机制实现地址双映射。将通过binder_become_context_manager指令将自己设置成为系统服务的大管家。通过binder_looper方法,通过ioctl不断与binder驱动进行读写交互,并通过binder_parse处理数据。int原创 2020-08-14 10:54:24 · 553 阅读 · 0 评论 -
binder机制原理分析(二):普通Service注册到ServiceManager
一般service注册到ServiceManager都经过五个步骤:sp proc = (ProcessState::self());获取ProcessState实例;sp sm = defaultServiceManager();获取IServiceManager实例;XXXService::Instantiate();调试用addService方法,将XXX服务注册到sm中去;ProcessState::self()—>startThreadPool();开启binder线程池;IPC原创 2020-08-14 12:26:31 · 836 阅读 · 0 评论 -
binder机制原理分析(三):从ServiceManager中获取服务
服务的获取和注册过程相似。获取一般经过:sp sm = defaultServiceManager();binder = sm->getService(String16(“media.player”));binder->linkToDeath(sDeathNotifier);sMediaPlayerService = interface_cast(binder);步骤一:defaultServiceManager()跟注册一样,defaultServiceManager最终返回的原创 2020-08-14 12:57:23 · 661 阅读 · 0 评论 -
binder机制原理分析(四):java层service的注册过程
步骤一、初始化注册jni对象Binder通信最终还是依赖与native层,java层的binder是native层binder的一个封装,实现还是在native层,这个映射关系在系统初始化的时候(在AndroidRuntime.cpp中)就将javaBinder和nativeBinder进行建立。并分别有结构体与之对应,如gBinderOffset与Binder、gBinderInternalOffset与BinderInternal、gBinderProxyOffset与BinderProxy的映射关系原创 2020-08-14 14:08:10 · 492 阅读 · 0 评论 -
binder机制原理分析(五):Java层service的获取过程
在AIDL中Java层获取service都是通过XXX.Stub.asInterFace()方法获取的;IXXXManager service = IXXXManager.Stub.asInterface(ServiceManager.getService(“name”));步骤一、获取ServiceManager的引用首先从缓存中获取,如果缓存中没有,那么就通过getService()方法获取。public static IBinder getService(String name) {原创 2020-08-14 14:29:31 · 868 阅读 · 0 评论