Большинство драйверов событий ввода находятся в каталоге drivers/input/. Однако, драйвер событий клавиатуры находится в drivers/char/keyboard.c, потому что он связан с виртуальными терминалами, а не узлами устройств в /dev/input/.
Вы можете найти драйверы устройств ввода в нескольких местах. Драйверы для старых клавиатур, мышей и джойстиков находятся в отдельных подкаталогах в drivers/input/. Драйверы ввода Bluetooth находятся в net/bluetooth/hidp/. Вы также можете найти драйверы ввода в таких местах, как drivers/hwmon/ и drivers/media/video/. Типы событий, коды и значения определены в include/linux/input.h.
Подсистема serio находится в drivers/input/serio/. Исходником дисциплины линии serport является drivers/input/serio/serport.c. Более подробная информация о различных интерфейсах ввода содержится в Documentation/input/.
Таблица 7.1 суммирует основные структуры данных, используемые в этой главе, и их расположение внутри дерева исходных текстов.
Таблица 7.2 перечисляет основные программные интерфейсы ядра, которые вы использовали в этой главе с указанием места их определения.
Таблица 7.1. Список структур данных
Структура данных
|
Местоположение
|
Описание
|
input_event
|
include/linux/input.h
|
Каждый пакет события, создаваемый evdev, имеет этот формат.
|
input_dev
|
include/linux/input.h
|
Представление устройства ввода.
|
input_handler
|
include/linux/serial_core.h
|
Содержит точки входа, поддерживаемые драйвером событий.
|
psmouse_protocol
|
drivers/input/mouse/psmouse-base.c
|
Информация о драйвере протокола, поддерживающего PS/2 мышь.
|
psmouse
|
drivers/input/mouse/psmouse.h
|
Методы, поддерживаемые драйвером PS/2 мыши.
|
Таблица 7.2. Список программных интерфейсов ядра
Интерфейс ядра
|
Местоположение
|
Описание
|
input_register_device()
|
drivers/input/input.c
|
Регистрирует устройство в ядре ввода
|
input_unregister_device()
|
drivers/input/input.c
|
Удаляет устройство из ядра ввода
|
input_report_rel()
|
include/linux/input.h
|
Генерирует относительное перемещение в заданном направлении
|
input_report_abs()
|
include/linux/input.h
|
Генерирует абсолютное перемещение в заданном направлении
|
input_report_key()
|
include/linux/input.h
|
Генерирует нажатие на клавишу или кнопку
|
input_sync()
|
include/linux/input.h
|
Показывает, что подсистема ввода может собрать предыдущие сгенерированные пакеты в пакет evdev и отправить их в пространство пользователя через /dev/input/inputX
|
input_register_handler()
|
drivers/input/input.c
|
Регистрирует специальный драйвер событий
|
sysfs_create_group()
|
fs/sysfs/group.c
|
Создаёт группу узлов sysfs с указанными атрибутами
|
sysfs_remove_group()
|
fs/sysfs/group.c
|
Удаляет группу sysfs, созданную с помощью sysfs_create_group()
|
tty_insert_flip_char()
|
include/linux/tty_flip.h
|
Отправляет символ на уровень дисциплины линии
|
platform_device_register_simple()
|
drivers/base/platform.c
|
Создаёт простое устройство платформы
|
platform_device_unregister()
|
drivers/base/platform.c
|
Отменяет регистрацию устройства платформы
|
|