Операционная система ЗОСРВ «Нейтрино» > Руководство разработчика > Основные принципы системной разработки > Разработка драйверов и драйверные библиотеки > Драйверные библиотеки > Библиотека разработки драйверов ввода (libinput) > Статьи и обзоры > Обзор драйверов ввода



Обзор драйверов ввода

Рассматриваются общие принципы функционирования драйверов ввода

Список подразделов:

Внутреннее устройство драйвера ввода
Виды шин событий
Способы компоновки модулей
Внешние интерфейсы

Внутреннее устройство драйвера ввода

Драйвер ввода состоит из нескольких компонентов:

Во время исполнения взаимосвязанные модули образуют путь передачи данных от устройства к операционной системе. Сами модули делятся на три типа:

Их взаимное расположение в архитектуре имеет вид:

Интерфейс ▴ │ ┌──────▾──────┐ ◂──┐ │ │ │ │ Фильтры │ │ │ │ │ └──────▴──────┘ │ │ │ ┌──────▾──────┐ │ │ │ │ │ Протоколы │ │ Шина событий │ │ │ └──────▴──────┘ │ │ │ ┌──────▾──────┐ │ │ │ │ │ Устройства │ │ │ │ │ └──────▴──────┘ ◂──┘ │ ▾ Оборудование

Объединение модулей составляет шину событий ввода, поступающих в систему.

Виды шин событий

Шины бывают трех видов:

Способы компоновки модулей

Модули устройств
Отвечают за взаимодействие с аппаратным обеспечением. Формат данных на этом уровне обычно не играет роли, в фокусе внимания оказываются именно получение данных.
Модули протоколов
Здесь происходит интерпретация данных в соответствии с аппаратно обусловленным протоколом.
Модули фильтров
Обеспечивают дальнейшие модификации данных, обобщающие данные по правилам конкретной шины событий.

Конфигурация модулей определяется в момент запуска драйвера и определяется его параметрами:

devi-driver [options] protocol [protocol_options] [device [device_options]] [filter [filter_options]]

Пример:

devi-hirun ps2 kb -2 &

Здесь представлены:

hirun
Имя драйвера.
ps2
Модуль протокола для PS/2 мыши.
kb
Модуль устройства, определяющий стандартный контроллер клавиатуры PC/AT 8042.
-2
Опции модуля устройства.

Число модулей фильтров ограничено: rel, abs и keyboard. Указывать их явно не всегда обязательно, поскольку драйвер в момент запуска в ряде случаев сам сообщает модулю протокола какой фильтр следует использовать. В примере выше протокол соответствует мыши, следовательно, фильтром может быть только rel. Основной сценарий, при котором требуется явное указание фильтра, это необходимость передачи ему опций.

Внешние интерфейсы

Пришедшие через шину событий данные передаются модулем фильтра в систему. Интерфейсов такой передачи несколько:

Интерфейс к Photon
Ему требуется запущенный сервер Photon, а сами данные передаются в виде сырых (raw) событий оконной системы Photon.
Интерфейс встроенного менеджера ресурсов
Этот интерфейс подразумевает создание префикса в директории /dev, из которого может напрямую читать данные прикладное приложение. Например, относительные события драйвер может предоставлять через префикс /dev/mouse0. Считанные из него данные можно интерпретировать в соответствии с заголовочным файлом <sys/dcmd_input.h>. Множественное открытие дескрипторов может быть осуществлено в блокирующем или не блокирующем режиме, а также с использованием уведомлений (например, через функции select(), ionotify()).

По умолчанию используется интерфейс к Photon. Для переключения в альтернативный режим следует передать драйверу ввода опции -r (запускает встроенный менеджер ресурсов) и -P (отключает интерфейс к Photon). Опция -r не может быть использована без -P.




Предыдущий раздел: Библиотека разработки драйверов ввода (libinput)