Android_Binder
文章平均质量分 88
super_marie
这个作者很懒,什么都没留下…
展开
-
Binder框架解析
BinderBinder是什么?1. Binder的概念对于Binder有以下这几种解释:Binder机制是Android系统独有的IPC方式,也是Android系统的核心Linux内核中的驱动文件(/dev/binder)在应用层的开发中,它是一个实现了IBinder接口的一个类,从而具备跨进程通讯的能力从Android Framework的角度来看,它连接了Client、Server、Service Manager和Binder驱动程序。形成一套C/S的通信模式实际上,抛去实原创 2021-09-26 23:11:35 · 264 阅读 · 0 评论 -
Binder框架探究之binder驱动
通过Binder框架图示,对于Binder的整体流程有了一个基本的认知后,接下来就可以深入每一个部分进行逐一的探究,首先先来探究:Binder的所谓一次拷贝究竟是什么?这个一次拷贝又是发生在何处?1 一次拷贝的原理解析1.1 内核空间和用户空间的数据交互如上篇 binder-框架认知 中 3.1章节 所陈述的,在Linux中,用户进程和内核空间是隔离的,而内核空间和用户空间之间的相互访问只能通过系统调用(System Call)进行,对于用户空间和内核空间之间的数据交互,常用的是以下的几个函数:.原创 2021-10-10 15:00:04 · 713 阅读 · 0 评论 -
Binder JNI注册
通过上两个篇章,对于Binder的整体框架,以及其中驱动层的逻辑梳理之后,接下来需要对Binder的JNI层注册进行一个梳理1. Zygote进程的启动解析init.rc文件Zygote是由init进程通过解析对应的init.zygote.rc文件进行创建的,这里可以看一下 init.zygote32.rc 文件文件路径:android/system/core/rootdir/init.zygote32.rc//这里会去找app_process文件夹下的app_main.cpp文件.原创 2021-10-10 15:18:08 · 511 阅读 · 0 评论 -
Service Manager的启动
Service Manager的用处在正式展开叙述之前,我们需要先说明一下为什么要进行Service Manager的启动和获取。回到binder-框架认知中的整体框架图可知:客户端想要和服务端进行通信,首先需要和对应服务端建立连接,那么客户端是怎么知道,并且完成和服务端进行连接的呢?这就需要用到Service Manager服务了,其实对应客户端和服务端的连接通信都是通过Service Manager来建立的,之所以Service Manager可以实现相关需求,原因如下:Service M原创 2021-10-10 19:48:44 · 1196 阅读 · 0 评论 -
Service Manager的获取
首先需要说明的是,本篇文章是从native层开始进行Service Manager的获取回到Binder的框架图,本质上Service的底层实体就是一个BBinder实体,而Clinet客户端想要调用某个service端,需要拿到对应service端的代理接口,也就是BpBinder对象。如上面的框架图,Client端想要和Service端进行通信,那么就需要使用defaultServiceManager()方法获取到IServiceManager对象,一旦拥有了IServiceManag..原创 2021-10-12 22:37:54 · 539 阅读 · 0 评论 -
从JAVA层addService到SM
经过前面几篇文章得分析,可以大致知晓从native层往下是如何进行SM的获取,那么这篇文章将着手从JAVA层开始梳理service服务端如何添加服务到SM中的addService()整体流程简介照例先给出整个流程的时序图addService整个流程的示意图如下:AMS启动本篇以AMS的addService为例进行梳理分析,其他的服务也都是大同小异,这里简单说一下AMS服务的启动AMS是由SystemServer进行开启的,我们从AMS开启入手。代码路径:androi.原创 2021-10-14 23:19:47 · 379 阅读 · 0 评论