Binder相关
Binder分析
需了解C/S还有管理这些的ServiceManager。
简单来讲你(client)有个包裹(parcel)让快递员(proxy)送到公司(server),
公司(server)接到包裹(parcel)后检查是否是自己的,是的话解开包裹,找相应的部门(corresponding method)处理。然后告诉你(client)。
ProcessState一个进程只能有一个。
- 首先打开/dev/binder设备,可以与binder交互了。
- Fd使用mmap使binder分配一块内存来接收。
- getContextObject函数返回一个IBinder指针。
BpBinder与BBBinder
BpBinder是client端创建的用于消息发送的代理,而BBinder是server端用于接收消息的通道。
- IServiceManager中调用asInerface的时候回创建BpBinder。
- 这两个类都是有IBinder派生出来的。
- BpBinder是客户端用来与Server交互的代理类,p即为Proxy的意思。
- BBinder是与proxy相对的一端,如果说Bpbinder代表客户端BBinder则是服务端。
- BpBinder与BBinder 是一一对应的。Binder系统通过handler来表示对应的BBinder。
- BnServicexxx是由BBinder派生,BpServicexxx是由BpBinder派生。
- 可以认为是Binder的一个道具。
- BpBinder构造函数传的参数handle的值是0(NULL),0代表ServiceManager所对应的BBinder。
- 在addService函数中把请求数据打包成data后传给BpBinder的transact函数。
此函数由IPCThreadState的tanscat来完成。
此函数中利用BC_消息码从应用程序发往Binder设备的,而回应请求时BR_开头的消息码。发送消息后会等待回应。 - IPCThreadState发送binder的数据(请求),然后等待回应。
每个IPCThreadState中都有一个mIn,mOut,其中mIn是用来接收来自Binder设备的数据的,相反mOut是存储发往Binder设备的数据。
Vold (Volume Daemon) & RILD(Radio Interface Layer Daemon)
Vold:
管理外部存储设备的后台进程。SD卡的插拔检查,SD卡挂载,卸载,格式化
工作流程:
- 从kernel项NM(Netlink Manager)发送uevent消息。
- NM转发给VolumeManager模块。
- VolumeManager通过CommandListener发送给MountService。
- MountService发送指令给VOLD。
Netlink与Uevent:
Netlink:用户空间与Kernel通讯机制。
Uevent:设备发送变化是发送的消息(字符串)。存在uevent文件。
RILD:
注释:多处理器(AP[Application Processor] & BP[Baseband Processor])
AP是用来跑OS的,BP是用来辅助射频无线通讯相关工作。
工作:
RILD是运行在AP上,通过RILD使AP与BP通讯发送AT指令来完成。
Dial拨号:
Phone应用提供了以个PhoneUtils类
PhoneUtils.java
调用Phone.dial(number); Phone对象是GSMPhone的代理PhoneProxy。
GSMPhone.java
调用GsmCallTrack.dial();
GsmCallTrack.java
构造一个GsmConnetion对象,调用RIL的dial(cm.dial())函数。
RIL.java
RIL是rild socket的唯一客户端。
RIL的构造函数中封装了两个线程
mSenderThread:用来向Rild发送消息。
mReceiverThread:用来从Rild中接收消息,还与rild进行socket连接。
dial();
发送请求到Rild中
Rild.cpp
收到数据时由eventLoop调用对应的任务处理函数处理(processCommandsCallback函数);
processCommandsCallback:
将从socket中read数据到缓冲区中,处理命令找出执行对应命令的函数。Rild中打电话的处理函数是dispatchDial(Ril.c)。
Ril.c
创建RIL_Dial对象(存储打电话所需要的一些参数)
调用RIL_RadioFunctions的onRequest函数,即向RefRil库发送请求。
Reference_Ril.c
发送AT指令。通知处理完成到java中的RIL的RILReceiver处理。
Binder相关的更多相关文章
- IPC机制--Binder
文章来自 Android技术内幕 系统卷 转:http://www.linuxidc.com/Linux/2011-08/40508.htm 什么是IPC机制以及IPC机制的种类 在Linux中,是以 ...
- 图解Android - Binder 和 Service
在 Zygote启动过程 一文中我们说道,Zygote一生中最重要的一件事就是生下了 System Server 这个大儿子,System Server 担负着提供系统 Service的重任,在深入了 ...
- 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...
- Android进程间通信(IPC)机制Binder简要介绍和学习计划
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6618363 在Android系统中,每一个应用 ...
- Android进程间通信(IPC)机制Binder简介和学习计划
在Android系统,每个应用程序是由多个Activity和Service部件,这些Activity和Service有可能在相同的处理被执行,此外,还可以在不同的过程中进行. 然后.不是在同一个过程A ...
- 插件开发之360 DroidPlugin源码分析(三)Binder代理
转载请注明出处:http://blog.csdn.net/hejjunlin/article/details/52138483 Hook机制中Binder代理类关系图 Hook机制中Binder代理时 ...
- 关于Binder,作为应用开发者你需要知道的全部
作者:rushjs https://www.jianshu.com/p/062a6e4f5cbe github 地址: https://github.com/rushgit/zhongwenjun.g ...
- Android : 跟我学Binder --- (4) 驱动情景分析
目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...
- (原创)Android Binder设计与实现 - 实现篇(1)
本文属于原创作品,转载请注明出处并放于明显位置,原文地址:http://www.cnblogs.com/albert1017/p/3849585.html 前言 在学习Android的Binder机制 ...
随机推荐
- 如何用C代码生成二维码
如何用C代码生成二维码 当下因微信和支付宝等手机应用广泛使用,而基于二维码/一维条码的移动支付,也借助手机移动端席卷全国,使得越来越多的人知道有"二维码"这么一种东西. 对于普通用 ...
- js数据结构与算法存储结构
数据结构(程序设计=数据结构+算法) 数据结构就是关系,没错,就是数据元素相互之间存在的一种或多种特定关系的集合. 传统上,我们把数据结构分为逻辑结构和物理结构. 逻辑结构:是指数据对象中数据元素之间 ...
- USACO Section 2.2 循环数 Runaround Numbers
OJ:http://www.luogu.org/problem/show?pid=1467 #include<iostream> #include<vector> #inclu ...
- TCP/IP详解学习笔记(1)-- 概述
1.TCP/IP的分层结构 网络协议通常分不同层次进行开发,每一层分别负责不同的同信功能.TCP/IP通常被认为是一个四层协议系统. 如图所示. 1)链路层(数据链路层 ...
- 自适应中overflow的作用
最近在做东西的时候发现overflow还有这样的妙处:可以实现自适应,之前没加overflow实现起来是有点问题的 代码如下: <!DOCTYPE html><html> &l ...
- 【Linux】部署cobbler
环境Centos 6.3,本地挂载镜像配置本地yum源 yum -y install dhcp httpd xinetd tftp-server http://dl.fedoraproject.org ...
- C++ 牛人博客(不断更新中...)
http://www.zhangjiee.com/ 新浪微博@独酌逸醉. Github. GitCafe. stackoverflow. Quora http://cpp1x.org/ 刘未鹏 | M ...
- 二、搭建struts2的开发环境
二.搭建struts2的开发环境 下载地址:http://struts.apache.org 解压后的目录结构: apps:框架本身提供一些案例(学习) docs:框架本身提供的文档(指南和API). ...
- Android 中断线程的处理
我现在对一个用户注册的功能1.用ProgressDialog将当前页面设成不可操作(保留返回键 退出ProgressDialog)2.用一个线程clientThread执行数据的提交和返回 问题:考虑 ...
- Android开发教程app下载无法成功创建问题
本文明来给各位同学介绍一下关于cordova cteate app 时下载失败无法成功创建的解决方法,有碰到此问题的同学可进入参考. 使用如下语句创建一个cordova应用: 代码如下 cordova ...