Рассматриваются общие принципы функционирования драйверов ввода
Драйвер ввода состоит из нескольких компонентов:
Во время исполнения взаимосвязанные модули образуют путь передачи данных от устройства к операционной системе. Сами модули делятся на три типа:
Их взаимное расположение в архитектуре имеет вид:
Интерфейс ▴ │ ┌──────▾──────┐ ◂──┐ │ │ │ │ Фильтры │ │ │ │ │ └──────▴──────┘ │ │ │ ┌──────▾──────┐ │ │ │ │ │ Протоколы │ │ Шина событий │ │ │ └──────▴──────┘ │ │ │ ┌──────▾──────┐ │ │ │ │ │ Устройства │ │ │ │ │ └──────▴──────┘ ◂──┘ │ ▾ Оборудование
Объединение модулей составляет шину событий ввода, поступающих в систему.
Шины бывают трех видов:
Конфигурация модулей определяется в момент запуска драйвера и определяется его параметрами:
devi-driver [options] protocol [protocol_options] [device [device_options]] [filter [filter_options]]
Пример:
devi-hirun ps2 kb -2 &
Здесь представлены:
Число модулей фильтров ограничено: rel, abs и keyboard. Указывать их явно не всегда обязательно, поскольку драйвер в момент запуска в ряде случаев сам сообщает модулю протокола какой фильтр следует использовать. В примере выше протокол соответствует мыши, следовательно, фильтром может быть только rel. Основной сценарий, при котором требуется явное указание фильтра, это необходимость передачи ему опций.
Пришедшие через шину событий данные передаются модулем фильтра в систему. Интерфейсов такой передачи несколько:
/dev
, из которого может напрямую читать данные прикладное приложение. Например, относительные события драйвер может предоставлять через префикс /dev/mouse0
. Считанные из него данные можно интерпретировать в соответствии с заголовочным файлом <sys/dcmd_input.h>
. Множественное открытие дескрипторов может быть осуществлено в блокирующем или не блокирующем режиме, а также с использованием уведомлений (например, через функции select(), ionotify()). По умолчанию используется интерфейс к Photon. Для переключения в альтернативный режим следует передать драйверу ввода опции -r (запускает встроенный менеджер ресурсов) и -P (отключает интерфейс к Photon). Опция -r не может быть использована без -P.
Предыдущий раздел: Библиотека разработки драйверов ввода (libinput)