Binder深讲解 底层 内核实现.docVIP

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Binder深讲解 底层 内核实现

第一节 Android Binder 星期四, 06/17/2010 - 00:03 — william Android Binder是一种在Android里广泛使用的一种远程过程调用接口。从结构上来说Android Binder系统是一种服务器/客户机模式,包括Binder Server、Binder Client和Android Binder驱动,实际的数据传输就是通过Android Binder驱动来完成的,这里我们就来详细的介绍Android Binder驱动程序。 通常来说,Binder是Android系统中的内部进程通讯(IPC)之一。在Android系统中共有三种IPC机制,分别是: -标准Linux Kernel IPC接口 -标准D-BUS接口 -Binder接口 尽管Google宣称Binder具有更加简洁、快速,消耗更小内存资源的优点,但并没有证据表明D-BUS就很差。实际上D-BUS可能会更合适些,或许只是当时Google并没有注意到它吧,或者Google不想使用GPL协议的D-BUS库。我们不去探究具体的原因了,你只要清楚Android系统中支持了多个IPC接口,而且大部分程序使用的是我们并不熟悉的Binder接口。 Binder是OpenBinder的Google精简实现,它包括一个Binder驱动程序、一个Binder服务器及Binder客户端(?)。这里我们只要介绍内核中的Binder驱动的实现。 对于Android Binder,它也可以称为是Android系统的一种RPC(远程过程调用)机制,因为Binder实现的功能就是在本地“执行”其他服务进程的功能的函数调用。不管是IPC也好,还是RPC也好,我们所要知道的就是Android Binder的功能是如何实现的。 Openbinder介绍 2.1.1 Android Binder协议 Android 的Binder机制是基于OpenBinder (/~hackbod/openbinder/docs/html/BinderIPCMechanism.html)来实现的,是一个OpenBinder的Linux实现。 Android Binder的协议定义在binder.h头文件中,Android的通讯就是基于这样的一个协议的。 Binder Type (描述binder type的功能) 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_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), }; Binder Object 进程间传输的数据被称为Binder对象(Binder Object),它是一个flat_binder_object,定义如下: struct flat_binder_object { /* 8 bytes for large_flat_header. */ unsigned long type; unsigned long flags; /* 8 bytes of data. */ union { void *binder; /* local object */ signed long handle; /* remote object */ }; /* extra data associated with local object */ void *cookie; }; 其中,类型字段描述了Binder 对象的类型,flags描述了传输方式,比如同步、异步等。 enum transaction_flags { TF_ONE_WAY = 0x01, /* this is a one-way call: async, no return */ TF

文档评论(0)

nbc152 + 关注
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档