android binder 讲解(一)

转载 2011年01月25日 14:56:00

  • 下面进行详细讲述Android Binder机制问题,Binder机制是通过驱动的形式来实现,其实驱动程序的部分是保存在源代码的以下的文件中。

 

Android Binder机制大部分都是使用的IPC,进程间通信机制有很多种,例如linux中可以采用管道,消息队列,信号,共享内存,socket等,这些都可以实现进程间的通信。

Android Binder机制通信是基于Service与Client的,有一个ServiceManager的守护进程管理着系统的各个服务,它负责监听是否有其他程序向其发送请求。如果有请求就响应。每个服务都要在ServiceManager中注册,而请求服务的客户端去ServiceManager请求服务。

binder的通信操作类似线程迁移(thread migration),binder的用户空间为每一个进程维护着一个可用的线程池, 用来处理到来的IPC以及执行本地消息。两个进程间通信就好像是一个进程进入另一个进程执行代码然后带着执行的结果返回,Android和驱动程序通信采用linux的ioctl机制。下面先简单介绍一下ioctl机制。

 

什么是ioctl

ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如串口的传输波特率、马达的转速等等。它的调用函数如下:int ioctl(int fd, ind cmd, …);其中fd就是用户程序打开设备时使用open函数返回的文件标示符,cmd就是用户程序对设备的控制命令,至于后面的省略号。

那是一些补充参数,一般最多一个,有或没有是和cmd的意义相关的。ioctl函数是文件结构中的一个属性分量。就是说如果你的驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数控制设备的I/O通道。

 

ioctl的必要性

如果不用ioctl的话,也可以实现对设备I/O通道的控制,但那就太复杂了。例如,我们可以在驱动程序中实现write的时候检查一下是否有特殊约定的数据流通过。如果有的话,那么后面就跟着控制命令(一般在socket编程中常常这样做)。但是如果这样做的话,会导致代码分工不明,程序结构混乱。

程序员自己也会头昏眼花的。所以,我们就使用ioctl来实现控制的功能。要记住,用户程序所作的只是通过命令码告诉驱动程序它想做什么,至于怎么解释这些命令和怎么实现这些命令,这都是驱动程序要做的事情。

Android Binder机制如何实现在驱动程序中实现的ioctl函数体内,实际上是有一个switch{case}结构,每一个case对应一个命令码,做出一些相应的操作。怎么实现这些操作,这是每一个程序员自己的事情,因为设备都是特定的。关键在于怎么样组织命令码,因为在ioctl中命令码是唯一联系用户程序命令和驱动程序支持的途径。命令码的组织是有一些讲究的。

因为我们一定要做到命令和设备是一一对应的,这样才不会将正确的命令发给错误的设备,或者是把错误的命令发给正确的设备。或者是把错误的命令发给错误的设备。这些错误都会导致不可预料的事情发生,而当程序员发现了这些奇怪的事情的时候,再来调试程序查找错误,那将是非常困难的事情。

Android5.0中Binder机制相关的常见的结构体和函数.

文章仅仅用于个人的学习记录,基本上内容都是网上各个大神的杰作,此处摘录过来以自己的理解学习方式记录一下。     个人最为认可和推崇的大神文章:           http://blog...
  • zy00000000001
  • zy00000000001
  • 2016年12月03日 10:59
  • 502

Android Binder机制完全解析

概述之前我写过一篇文章Android Service全面解析,简单实现了如何通过AIDL实现Service的跨进程通信(IPC),其实是通过Binder机制来实现的,本文我们就重点来看看Binder机...
  • huaxun66
  • huaxun66
  • 2016年10月29日 19:24
  • 2037

android binder 基础实例及解析(二)

binder的基础例子,加入了匿名binder的使用。并根据例子做了详细的分析。
  • newchenxf
  • newchenxf
  • 2015年10月26日 15:51
  • 1922

全面升级Android面试之Binder面试题集

(1)什么是Binder 1. 直观来说,Binder是Android中的一个类,它继承了IBinder接口 2. 从IPC角度来说,Binder是Android中的一种跨进程通信方式,Binde...
  • lijizhi19950123
  • lijizhi19950123
  • 2017年09月10日 08:33
  • 396

[深入理解Android卷一全文-第六章]深入理解Binder

由于《深入理解Android 卷一》和《深入理解Android卷二》不再出版,而知识的传播不应该因为纸质媒介的问题而中断,所以我将在CSDN博客中全文转发这两本书的全部内容。第6章 深入理解Binde...
  • Innost
  • Innost
  • 2015年08月02日 16:00
  • 10800

Binder机制初解

简述.... 3 IPC 与 Binder. 3 Binder IPC 程序结构.... 3 Binder层次划分.... 4 驱动层... 4 驱动适配层... 5 Bind...
  • daweibalang717
  • daweibalang717
  • 2014年11月22日 16:00
  • 1876

一篇文章了解相见恨晚的 Android Binder 进程间通讯机制

Android-Binder进程间通讯机制 概述 最近在学习Binder机制,在网上查阅了大量的资料,也看了老罗的Binder系列的博客和Innost的深入理解Binder系列的博客,都是从底...
  • freekiteyu
  • freekiteyu
  • 2017年04月11日 18:12
  • 2944

Android7.0 Binder通信(4) Java层中的Binder

之前博客分析Binder机制时,集中分析的是Native层Binder的架构,现在来分析一下Java层Binder的架构。...
  • Gaugamela
  • Gaugamela
  • 2016年09月20日 19:50
  • 1903

android (八)Binder浅谈

在这里写下对binder的理解,说到Binder间进程通信,Linux那么多进程间通信工具为何引入了Binder。大概原因有两点: 1、为了提高通信的效率。 2、为了方便开发者,让进程间通信和RPC(...
  • jiabailong
  • jiabailong
  • 2016年07月20日 17:50
  • 604

Android -- 使用Binder API实现一个简单服务

Android -- 使用Binder API实现一个简单服务 在上一篇博客中,我们借助ServiceManager从源码的角度简要分析了一下Binder的使用机制;接下来,我们就可以按照Serv...
  • csdn_of_coder
  • csdn_of_coder
  • 2017年01月04日 22:43
  • 611
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android binder 讲解(一)
举报原因:
原因补充:

(最多只允许输入30个字)