一.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)
{
}