binder深入讲解 底层 内核实现

binder深入讲解 底层 内核实现

ID:14146331

大小:451.50 KB

页数:39页

时间:2018-07-26

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系统中共有

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

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

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

5、PE_WEAK_BINDER=B_PACK_CHARS('w','b','*',B_TYPE_LARGE),BINDER_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对象(BinderObj

6、ect),它是一个flat_binder_object,定义如下:structflat_binder_object{/*8bytesforlarge_flat_header.*/unsignedlongtype;unsignedlongflags;/*8bytesofdata.*/union{void*binder;/*localobject*/signedlonghandle;/*remoteobject*/};/*extradataassociatedwithlocalobject*/void*cookie;};其中,类型字段描述了Bi

7、nder对象的类型,flags描述了传输方式,比如同步、异步等。enumtransaction_flags{TF_ONE_WAY=0x01,/*thisisaone-waycall:async,noreturn*/TF_ROOT_OBJECT=0x04,/*contentsarethecomponent'srootobject*/TF_STATUS_CODE=0x08,/*contentsarea32-bitstatuscode*/TF_ACCEPT_FDS=0x10,/*allowreplieswithfiledescriptors*/}

8、;传输的数据是一个复用数据联合体,对于BINDER类型,数据就是一个binder本地对象,如果是HANDLE类型,这数据就是一个远程的handle对象。该如何理解本地binder

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

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

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