首页 android_binder_讲解.doc

android_binder_讲解.doc

android_binder_讲解.doc

上传者: 与世无争 2011-03-04 评分1 评论0 下载43 收藏0 阅读量473 暂无简介 简介 举报

简介:本文档为《android_binder_讲解doc》,可适用于手机软件领域,主题内容包含androidbinder讲解androidbinder讲解http:blogcsdnnetliuyahuiarchiveaspx下面进行详细讲述A符等。

androidbinder讲解 http://blog.csdn.net/liuyahui312031/archive/2011/01/25/6163075.aspx 下面进行详细讲述AndroidBinder机制问题,Binder机制是通过驱动的形式来实现,其实驱动程序的部分是保存在源代码的 以下的文件中。 AndroidBinder机制大部分都是使用的IPC,进程间通信机制有很多种,例如linux中可以采用管道,消息队列,信号,共享 内存,socket等,这些都可以实现进程间的通信。 AndroidBinder机制通信是基于Service与Client的,有一个ServiceManager的守护进程管理着系统的各个服务,它负责 监听是否有其他程序向其发送请求。如果有请求就响应。每个服务都要在ServiceManager中注册,而请求服务的客户端去 ServiceManager请求服务。 binder的通信操作类似线程迁移(threadmigration),binder的用户空间为每一个进程维护着一个可用的线程池,用来处理 到来的IPC以及执行本地消息。两个进程间通信就好像是一个进程进入另一个进程执行代码然后带着执行的结果返回, Android和驱动程序通信采用linux的ioctl机制。下面先简单介绍一下ioctl机制。 什么是ioctl ioctl是设备驱动程序中对设备的I/O通道进行管理的函数。所谓对I/O通道进行管理,就是对设备的一些特性进行控制,例如 串口的传输波特率、马达的转速等等。它的调用函数如下:intioctl(intfd,indcmd,…);其中fd就是用户程序打开设备时 使用open函数返回的文件标示符,cmd就是用户程序对设备的控制命令,至于后面的省略号。 那是一些补充参数,一般最多一个,有或没有是和cmd的意义相关的。ioctl函数是文件结构中的一个属性分量。就是说如果 你的驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数控制设备的I/O通道。 ioctl的必要性 如果不用ioctl的话,也可以实现对设备I/O通道的控制,但那就太复杂了。例如,我们可以在驱动程序中实现write的时候检 查一下是否有特殊约定的数据流通过。如果有的话,那么后面就跟着控制命令(一般在socket编程中常常这样做)。但是如 果这样做的话,会导致代码分工不明,程序结构混乱。 程序员自己也会头昏眼花的。所以,我们就使用ioctl来实现控制的功能。要记住,用户程序所作的只是通过命令码告诉驱动 程序它想做什么,至于怎么解释这些命令和怎么实现这些命令,这都是驱动程序要做的事情。 Andr oid Binder机制如何实现在驱动程序中实现的ioctl函数体内,实际上是有一个switch{case}结构,每一个case对应一 个命令码,做出一些相应的操作。怎么实现这些操作,这是每一个程序员自己的事情,因为设备都是特定的。关键在于怎么 样组织命令码,因为在ioctl中命令码是唯一联系用户程序命令和驱动程序支持的途径。命令码的组织是有一些讲究的。 因为我们一定要做到命令和设备是一一对应的,这样才不会将正确的命令发给错误的设备,或者是把错误的命令发给正确的设 备。或者是把错误的命令发给错误的设备。这些错误都会导致不可预料的事情发生,而当程序员发现了这些奇怪的事情的时 候,再来调试程序查找错误,那将是非常困难的事情。 第一部分 Binder 的组成 1.1驱动程序部分驱动程序的部分在以下的文件夹中: Java代码 1.kernel/include/linux/binder.h 2.kernel/drivers/android/binder.c binder驱动程序是一个miscdevice,主设备号为10,此设备号使用动态获得(MISC_DYNAMIC_MINOR),其设备的节点 为: /dev/binder binder驱动程序会在proc文件系统中建立自己的信息,其文件夹为/proc/binder,其中包含如下内容: proc目录:调用Binder各个进程的内容 state文件:使用函数binder_read_proc_state stats文件:使用函数binder_read_proc_stats transactions文件:使用函数binder_read_proc_transactions transaction_log文件:使用函数binder_read_proc_transaction_log,其参数为binder_transaction_log(类型为struct binder_transaction_log) failed_transaction_log文件:使用函数binder_read_proc_transaction_log其参数为 binder_transaction_log_failed(类型为structbinder_transaction_log)

第1页

职业精品

现金采购管理制度.doc

材料采购及出入库管理制度.doc

日常采购管理流程.doc

采购管理.ppt

用户评论

0/200
    暂无评论
上传我的资料

精彩专题

相关资料换一换

资料评价:

/ 30
所需积分:5 立即下载

意见
反馈

返回
顶部