binder深入讲解底层内核实现

binder深入讲解底层内核实现

ID:34721912

大小:485.68 KB

页数:39页

时间:2019-03-10

binder深入讲解底层内核实现_第1页
binder深入讲解底层内核实现_第2页
binder深入讲解底层内核实现_第3页
binder深入讲解底层内核实现_第4页
binder深入讲解底层内核实现_第5页
资源描述:

《binder深入讲解底层内核实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、第一节AndroidBinder星期四,06/17/2010-00:03—williamAndroidBinder是一种在Android里广泛使用的一种远程过程调用接口。从结构上来说AndroidBinder系统是一种服务器/客户机模式,包括BinderServer、BinderClient和AndroidBinder驱动,实际的数据传输就是通过AndroidBinder驱动来完成的,这里我们就来详细的介绍AndroidBinder驱动程序。通常来说,Binder是Android系统中的内部进程通讯(IPC)之一。在Android系统中共有三种IPC机制,分别是:-标准

2、LinuxKernelIPC接口-标准D-BUS接口-Binder接口尽管Google宣称Binder具有更加简洁、快速,消耗更小内存资源的优点,但并没有证据表明D-BUS就很差。实际上D-BUS可能会更合适些,或许只是当时Google并没有注意到它吧,或者Google不想使用GPL协议的D-BUS库。我们不去探究具体的原因了,你只要清楚Android系统中支持了多个IPC接口,而且大部分程序使用的是我们并不熟悉的Binder接口。Binder是OpenBinder的Google精简实现,它包括一个Binder驱动程序、一个Binder服务器及Binder客户端(?)。

3、这里我们只要介绍内核中的Binder驱动的实现。对于AndroidBinder,它也可以称为是Android系统的一种RPC(远程过程调用)机制,因为Binder实现的功能就是在本地“执行”其他服务进程的功能的函数调用。不管是IPC也好,还是RPC也好,我们所要知道的就是AndroidBinder的功能是如何实现的。Openbinder介绍2.1.1AndroidBinder协议Android的Binder机制是基于OpenBinder(http://www.angryredplanet.com/~hackbod/openbinder/docs/html/BinderI

4、PCMechanism.html)来实现的,是一个OpenBinder的Linux实现。AndroidBinder的协议定义在binder.h头文件中,Android的通讯就是基于这样的一个协议的。·BinderType(描述bindertype的功能)Android定义了五个(三大类)Binder类型,如下:enum{BINDER_TYPE_BINDER=B_PACK_CHARS('s','b','*',B_TYPE_LARGE),BINDER_TYPE_WEAK_BINDER=B_PACK_CHARS('w','b','*',B_TYPE_LARGE),BINDER

5、_TYPE_HANDLE=B_PACK_CHARS('s','h','*',B_TYPE_LARGE),BINDER_TYPE_WEAK_HANDLE=B_PACK_CHARS('w','h','*',B_TYPE_LARGE),BINDER_TYPE_FD=B_PACK_CHARS('f','d','*',B_TYPE_LARGE),};·BinderObject进程间传输的数据被称为Binder对象(BinderObject),它是一个flat_binder_object,定义如下:structflat_binder_object{/*8bytesforlarge_

6、flat_header.*/unsignedlongtype;unsignedlongflags;/*8bytesofdata.*/union{void*binder;/*localobject*/signedlonghandle;/*remoteobject*/};/*extradataassociatedwithlocalobject*/void*cookie;};其中,类型字段描述了Binder对象的类型,flags描述了传输方式,比如同步、异步等。enumtransaction_flags{TF_ONE_WAY=0x01,/*thisisaone-waycall

7、:async,noreturn*/TF_ROOT_OBJECT=0x04,/*contentsarethecomponent'srootobject*/TF_STATUS_CODE=0x08,/*contentsarea32-bitstatuscode*/TF_ACCEPT_FDS=0x10,/*allowreplieswithfiledescriptors*/};传输的数据是一个复用数据联合体,对于BINDER类型,数据就是一个binder本地对象,如果是HANDLE类型,这数据就是一个远程的handle对象。该如何理解本地binder

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。