Как ядро ​​Linux знает, в какой файловый дескриптор записывать входные события? - PullRequest
0 голосов
/ 09 февраля 2019

Я хотел бы знать механизм, в котором ядро ​​Linux знает, в какой файловый дескриптор (например, / dev / input / eventX) записать входные данные.Например, я знаю, что когда пользователь щелкает мышью, происходит прерывание, которое обрабатывается драйвером и передается ядру ввода Linux через input_event (drivers / input / input.c), которое в конечном итоге записывается в соответствующий файл.в / dev / input /.В частности, я хочу знать, через какие исходные файлы мне нужно пройти, чтобы узнать, как ядро ​​знает, в какой файл записать данные, основываясь на информации, предоставленной о входном событии.Моя цель - посмотреть, смогу ли я определить файловые дескрипторы, соответствующие определенным кодам событий ввода, прежде чем ядро ​​запишет их в файлы символов / dev / input / eventX.

1 Ответ

0 голосов
/ 09 апреля 2019

Вы можете просмотреть два файла: drivers / input / input.c drivers / input / evdev.c В evdev.c evdev_init () вызовет input_register_handler () для инициализации input_handler_list.

Затем вДрайвер устройства ввода после инициализации input_dev вызовет: input_register_device (input_dev) -> получить путь к устройству, например /devices/soc/78ba000.i2c/i2c-6/6-0038/input/input2 -> input_attach_handler () -> handler-> connect (handler, dev, id);-> evdev_connect ()

В evdev_connect () это будет сделано ниже: 1. Динамическое выделение второстепенного для нового evdev.2. dev_set_name (& evdev-> dev, "событие% d", dev_no);3. вызовите input_register_handle () для соединения input_dev и evdev-> handle.4. создайте cdev и вызовите device_add ().

После этого вы найдете входной узел / dev / input / eventX, X - значение dev_no.

...