歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android中Input型輸入設備驅動原理分析

Android中Input型輸入設備驅動原理分析

日期:2017/3/1 10:57:59   编辑:Linux編程

話說Android中Event輸入設備驅動原理分析還不如說Linux輸入子系統呢,反正這個是沒變的,在android的底層開發中對於Linux的基本驅動程序設計還是沒變的,當然Android底層機制也增加幾個屬於android自己的機制。典型的IPC

Android中的input設備驅動主要包括:游戲桿(joystick)、鼠標(mouse)和事件設備(Event)。

1、Input輸入子系統的構架,在網上找到兩幅灰常漂亮的圖。

下面這幅更漂亮,更直觀的能看出input型輸入子系統究竟是什麼咚咚,更能夠體現出,用戶空間,內核空間,驅動程序是怎麼關聯起來的。。。


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;
};

Copyright © Linux教程網 All Rights Reserved