歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

話說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