Linux輸入子系統分析二

Linux輸入子系統分析二

input輸入子系統主要函數分析

各種註冊函數:input_register_device,.input_register_handle,.input_register_handler

  1. input_register_device:用來註冊一個輸入設備
    int input_register_device(struct unput_dev *dev)
    主要功能:初始化一些默認值,將自己的device結構添加到Linux設備模型中。將input_dev添加到input_dev_list鏈表中,然後尋找合適的handler與input_handler配對,配對的核心函數是input_attach_handler
    1.1 input_attach_handler
    int input_attach_handler(struct input_dev *dev, struct input_handler *handler)
    主要功能:調用兩個函數:配對函數input_match_device和處理函數connect
    1.1.1 input_match_device
    static const struct input_device_id *input_match_device(const struct input_device_id *id, struct input_dev *dev)
    主要功能:比較input_dev中的id和handler支持的id,存放在handler的id_table中
    首先看id->driver_info有沒有設置,如果設置了說明他匹配所有的id,evdev就是這樣的handler。然後根據id->flag來比較內容,如果都比較成功進入MATCH_BIT,這個宏是用來按位進行比較的,功能是比較所支持的事件類型,只有所有的位都匹配才返回成功。否則進入下一個id的比較。
    1.1.2 connect
    觸摸屏的connect函數:evdev_connect
    static int evdev_connect(struct input_handler *handler,struct input_dev *dev,const struct input_device_id *id)
    主要功能:做配對後的善後工作,分配一個evdev結構體,並初始化相關成員,evdev結構體中有input_handle結構,初始化並註冊之。

  2. input_register_handle:用來註冊input_handle結構體
    int input_register_handle(struct input_handle *handle)
    主要功能:把一個handle結構體通過d_node鏈表項,分別鏈接到input_dev的h_list,input_handler的h_list上,以後通過這個h_list就可以遍歷相關的input_handle

  3. input_register_handler:註冊一個input_handler結構體
    int input_register_handler(struct input_handler *handler)
    主要功能:參照input_register_device

input_dev和input_handler關聯圖

這裏寫圖片描述

發佈了32 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章