Linux之Input子系統——基於5.4內核

一.Input子系統組成

輸入子系統由驅動層(Drivers),輸入子系統核心層(Input Core),和事件處理層(Event Handler)三部分組成。一個輸入事件,如鼠標移動,鍵盤按下等都是通過Driver -> Input Core -> Eventhandler ->userspace的順序到達用戶空間傳個應用程序。

 

二.Input設備驅動編寫

 

三.Input子系統核心

Input設備註冊的接口:input_register_device()

int input_register_device(struct input_dev *dev)

{

___set_bit(EV_SYN, dev->evbit);

 

list_add_tail(&dev->node, &input_dev_list);

list_for_each_entry(handler, &input_handler_list, node)
input_attach_handler(dev, handler);

這裏是重點,將input device掛到input_dev_list鏈表上,然後對每一個掛在input_handler_list鏈表上的handler調用input_attach_handler()。這裏就好比設備模型中device和driver的匹配。所有的input device都掛在input_dev_list上,所有的handler都掛在input_handler_list上。

}

看一下這個匹配過程,是在input_attach_handler()中進行的:

static int input_attach_handler(input_dev *dev, struct input_handler *handler)

{

id = input_match_device(handler, dev);

if (!id)

    return -ENODEV;

error = handler->connect(handler, dev, id);

}

調用input_match_device()匹配,如果匹配成功,則調用handler->connect().具體看看匹配過程:

static const struct input_device_id *input_match_device(struct input_handler *handler, struct input_dev *dev)

{

 

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章