Binder相关

Binder分析

需了解C/S还有管理这些的ServiceManager。

简单来讲你(client)有个包裹(parcel)让快递员(proxy)送到公司(server),

   公司(server)接到包裹(parcel)后检查是否是自己的,是的话解开包裹,找相应的部门(corresponding method)处理。然后告诉你(client)。

ProcessState一个进程只能有一个。

  1. 首先打开/dev/binder设备,可以与binder交互了。
  2. Fd使用mmap使binder分配一块内存来接收。
  3. getContextObject函数返回一个IBinder指针。

 BpBinder与BBBinder

BpBinder是client端创建的用于消息发送的代理,而BBinder是server端用于接收消息的通道。

  1. IServiceManager中调用asInerface的时候回创建BpBinder。
  2. 这两个类都是有IBinder派生出来的。
  3. BpBinder是客户端用来与Server交互的代理类,p即为Proxy的意思。
  4. BBinder是与proxy相对的一端,如果说Bpbinder代表客户端BBinder则是服务端。
  5. BpBinder与BBinder 是一一对应的。Binder系统通过handler来表示对应的BBinder。
  6. BnServicexxx是由BBinder派生,BpServicexxx是由BpBinder派生。
  7. 可以认为是Binder的一个道具。
  8. BpBinder构造函数传的参数handle的值是0(NULL),0代表ServiceManager所对应的BBinder。
  9. 在addService函数中把请求数据打包成data后传给BpBinder的transact函数。
    此函数由IPCThreadState的tanscat来完成。
    此函数中利用BC_消息码从应用程序发往Binder设备的,而回应请求时BR_开头的消息码。发送消息后会等待回应。
  10. IPCThreadState发送binder的数据(请求),然后等待回应。

每个IPCThreadState中都有一个mIn,mOut,其中mIn是用来接收来自Binder设备的数据的,相反mOut是存储发往Binder设备的数据。

Vold (Volume Daemon) & RILD(Radio Interface Layer Daemon)

Vold:

管理外部存储设备的后台进程。SD卡的插拔检查,SD卡挂载,卸载,格式化

工作流程:

  1. 从kernel项NM(Netlink Manager)发送uevent消息。
  2. NM转发给VolumeManager模块。
  3. VolumeManager通过CommandListener发送给MountService。
  4. 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处理。

时间: 2024-11-03 22:15:45

Binder相关的相关文章

Android进程间通信(IPC)机制Binder简介和学习计划

在Android系统,每个应用程序是由多个Activity和Service部件,这些Activity和Service有可能在相同的处理被执行,此外,还可以在不同的过程中进行. 然后.不是在同一个过程Activity或者Service是怎样通信的呢?这就是本文中要介绍的Binder进程间通信机制了. 我们知道,Android系统是基于Linux内核的,而Linux内核继承和兼容了丰富的Unix系统进程间通信(IPC)机制. 有传统的管道(Pipe).信号(Signal)和跟踪(Trace).这三项

转 理解Android系统Binder机制

一.Binder机制概述 在Android开发中,很多时候我们需要用到进程间通信,所谓进程间通信,实现进程间通信的机制有很多种,比如说socket.pipe等,Android中进程间通信的方式主要有三种: 1.标准Linux Kernel IPC 接口: 2.标准D-BUS接口: 3.Binder接口. 其中,Binder机制是使用最且最被认可的,因为Binder机制有以下优点: 1.相对于其它IPC机制,Binder机制更加简洁和快速: 2.消耗的内存相对更少: 3.传统的IPC机制可能会增加

转Android进程间通信(IPC)机制Binder简要介绍和学习计划

转自:http://blog.csdn.net/luoshengyang/article/details/6618363/ 在Android系统中,每一个应用程序都是由一些Activity和Service组成的,这些Activity和Service有可能运行在同一个进程中,也有可能运行在不同的进程中.那么,不在同一个进程的Activity或者Service是如何通信的呢?这就是本文中要介绍的Binder进程间通信机制了. <Android系统源代码情景分析>一书正在进击的程序员网(http:/

Android系统Binder机制学习总结

一.Binder机制概述 在Android开发中,很多时候我们需要用到进程间通信,所谓进程间通信,实现进程间通信的机制有很多种,比如说socket.pipe等,Android中进程间通信的方式主要有三种: 1.标准Linux Kernel IPC 接口: 2.标准D-BUS接口: 3.Binder接口. 其中,Binder机制是使用最且最被认可的,因为Binder机制有以下优点: 1.相对于其它IPC机制,Binder机制更加简洁和快速: 2.消耗的内存相对更少: 3.传统的IPC机制可能会增加

关于 Android 平台开发相关的有哪些推荐书籍?

转自:http://www.zhihu.com/question/19579609 作者:Shan Huang 链接:http://www.zhihu.com/question/19579609/answer/12306890 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 学习android开发,我不建议花太多时间在书籍上,因为android的版本更新实在太快了,任何一本书籍都不可能跟上Google的步伐,但是,对于新手来说,买一本入门的书还是可以的,这里我推

Android Binder机制介绍

做过Android开发的同学可能有些体会,入门初期,工作内容主要是实现各式各样的UI界面,以及实现应用的业务逻辑.在这个阶段,我们会逐渐熟悉View系统,逐渐学会实现各种各样的界面以及动画效果.再往后,当我们想更深入的学习android系统,比如学习android四大组件的启动过程.AMS.PMS等等时,都会遇到一个叫做Binder的东西.结合笔者的经验,Binder可以说是深入理解Android系统的重要基础.binder作为android系统进程间通信的机制,贯穿在方方面面.我们平时使用最多

android分析之Binder 01

终于还是得写一篇关于Binder的文章了.从最初接触Android到花大把时间研究Android源码,Binder一直是分析道路的拦路虎.看了几本最流行的Android源码分析书籍,每次基本上都不能把Binder相关知识看完.读透.好在一直没有放弃,第一次理解不了就跳过,下一次重新读,每次读都有新的收获.现在是时候整理整理了. 我理解的Binder是什么?一种IPC(跨进程通信)的实现方式.注意“跨进程”,表明数据从一个进程“流向”了另一个进程.首先要了解为什么跨进程那么难?因为应用程序的地址空

浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信(IPC)机制Binder简要介绍和学习计划简要介绍了Android系统进程间通信机制Binder的总体架构,它由Client.Server.Service Manager和驱动程序Binder四个组件构成.本文着重介绍组件Service Manager,它是整个Binder机制的守护进程,用来管理

Android进程间通信(IPC)机制Binder简要介绍和学习计划

文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6618363 在Android系统中,每一个应用程序都是由一些Activity和Service组成的,这些Activity和Service有可能运行在同一个进程中,也有可能运行在不同的进程中.那么,不在同一个进程的Activity或者Service是如何通信的呢?这就是本文中要介绍的Binder进程间通信机制了. 我们知道,Android系统是基