话说Android中Event输入设备驱动原理分析还不如说Linux输入子系统呢,反正这个是没变的,在android的底层开发中对于Linux的基本驱动程序设计还是没变的,当然Android底层机制也增加几个属于android自己的机制。典型的IPC
Android中的input设备驱动主要包括:游戏杆(joystick)、鼠标(mouse)和事件设备(Event)。
1、Input输入子系统的构架,在网上找到两幅灰常漂亮的图。
![](http://hi.csdn.net/attachment/201111/14/0_1321261639oIs5.gif)
下面这幅更漂亮,更直观的能看出input型输入子系统究竟是什么咚咚,更能够体现出,用户空间,内核空间,驱动程序是怎么关联起来的。。。
![](http://hi.csdn.net/attachment/201111/14/0_13212616590k1x.gif)
Input驱动同样也是字符设备,主设备号是13,次设备号是64~95之间自动生成的,这个Input驱动程序那是相当相当的复杂。在android内核中主要需要关注一下几个文件
a)include/linux/input.h(驱动头文件)
b)driver/input/input.c (驱动核心实现,包含大量的操作接口)
c)driver/input/event.c
(事件驱动)
d)driver/input/joydev.c(游戏杆驱动)
e)driver/input/mousedev.c(鼠标驱动)
其实上面这些东西都不要我们自己去实现内核已经帮我们实现好了,不过我们在写硬件驱动的时候需要和Inputcore交互,所以需要用到上面这些函数中的接口,也就是说上面这些函数是透明的。
2、Event事件驱动原理及其实现
在内核中,用input_dev来描述一个Input设备,该结构的定义如下,
其中内核中使用input_register_device(struct input_dev *dev)来注册一个input设备
这个结构体好长,所以就列了几个。。。。它的定义在input.h当中
struct input_dev {
。。。。。。。。。。。
struct input_id id;/*指向input_id结构*/
bool sync;
struct device dev;/**这些设备都归属总线设备模型*/
struct list_head h_list; //
struct list_head node; //input_handle链表的list节点
};
用input_handler表示input设备的接口,使用input_register_handler(struct
input_handler *handler)注册
struct input_handler {
void *private;
。。。。。。。。。。
int (*connect)(struct input_handler *handler, struct input_dev *dev, const struct input_device_id *id);
void (*disconnect)(struct input_handle *handle);
void (*start)(struct input_handle *handle);
const struct file_operations *fops;
int minor;
const char *name;
const struct input_device_id *id_table;
struct list_head h_list;
struct list_head node;
};
饿了写不下去了
分享到:
相关推荐
在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...
在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...
1.5 开发第一个Android应用程序 1.6 单独编译和打包Android应用程序模块 1.6.1 导入单独编译模块的mmm命令 1.6.2 单独编译Android应用程序模块 1.6.3 重新打包Android系统镜像文件 第2章 硬件抽象层 ...
1.5 开发第一个Android应用程序 1.6 单独编译和打包Android应用程序模块 1.6.1 导入单独编译模块的mmm命令 1.6.2 单独编译Android应用程序模块 1.6.3 重新打包Android系统镜像文件 第2章 硬件抽象层 2.1 ...
在每一章中,重点介绍了与Android驱动开发相关的底层知识,并对Android源码进行了剖析。 本书适合Android研发人员及Android爱好者学习,也可以作为相关培训学校和大专院校相关专业的教学用书。 全书压缩打包成3...
5.5.3 event输入驱动的原理 /224 5.5.4 event输入驱动的实现 /225 5.6 蓝牙驱动(bluetooth)/235 5.6.1 bluetooth驱动的构架 /235 5.6.2 bluez的原理及实现 /237 5.7 wlan驱动(wi-fi)/244 5.7.1 wlan构架 /244 ...
5.5.3 event输入驱动的原理 /224 5.5.4 event输入驱动的实现 /225 5.6 蓝牙驱动(bluetooth)/235 5.6.1 bluetooth驱动的构架 /235 5.6.2 bluez的原理及实现 /237 5.7 wlan驱动(wi-fi)/244 5.7.1 wlan构架 /...
本文实例讲述了Android6.0开发中屏幕旋转原理与流程。分享给大家供大家参考,具体如下: 从Android 系统开发开始,这里写下Android 6.0 屏幕旋转系统分析。 第一部分 Kenel Android 系统屏幕旋转得以实现,是靠从...
1.5 开发第一个Android应用程序................................... 8 1.6 单独编译和打包Android应用程序模块.......................................................... 11 1.6.1 导入单独编译模块的mmm命令...
(1)校验 (2)校准 (1)我们先修改内核部分,我的平台用的触摸屏幕驱动是tsc2007,驱动文件为内核/drivers/input/touchscreen