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中命令码是唯一联系用户程序命令和驱动程序支持的途径。命令码的组织是有一些讲究的。

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

相关文章推荐

android_binder_讲解

  • 2011-07-12 15:23
  • 581KB
  • 下载

android binder 讲解

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

android binder 讲解(四)

Binder通信简介:    Linux系统中进程间通信的方式有:socket, named pipe,message queque, signal,share memory。Java系统中的进程间通...

android binder机制及其源码解析 之第二节重要函数讲解之常用数据结构(一)

struct binder_work {    struct list_head entry;    enum {        BINDER_WORK_TRANSACTION =...

android binder机制及其源码解析之第二节 重要函数讲解之常用数据结构(一)

struct binder_work {    struct list_head entry;    enum {        BINDER_WORK_TRANSACTION =...

android binder 讲解(二)

第一部分 Binder的组成 1.1 驱动程序部分驱动程序的部分在以下的文件夹中: Java代码 kernel/include/linux/binder.h  kernel/drivers/andro...

android binder 讲解(三)

o IBinder接口IBinder接口是对跨进程的对象的抽象。普通对象在当前进程可以访问,如果希望对象能被其它进程访问,那就必须实现IBinder接口。IBinder接口可以指向本地对象,也可以指向...

android binder 详解

  • 2014-07-20 10:16
  • 824KB
  • 下载

Android的Binder机制

Android的Binder机制 1.什么是binder Binder是Android跨进程通信方式,它实现了IBinder接口,是ServiceManager连接各种Manager(如Windo...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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