Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: драйвер клавиатуры
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
VDV
есть: несколько кнопок.
надо: чтобы нажатие на них воспринималось как нажатие заданных кнопок на клавиатуре.

непонятно как это сделать, ибо:
драйвер клавиатуры - это обычно /dev/tty
то есть tty устройство.
смотрим
/linux/drivers/char/keyboard.c
это tty устройство но без общения с физикой.
то есть некий промежуточный слой?
какие функции он выполняет?

смотрим
/linux/drivers/input/serio/i8042.c
это общение с физикой. но это не tty драйвер.
как тогда он работает?
в функции обработки прерывания видим serio_interrupt, видимо, это и есть передача данных следующему уровню обработки?

далее, если посмотреть исходник
/libminigui-1.6.10/src/gui/keyboard.c
, то там находится код, очень похожий на код в /linux/drivers/char/keyboard.c
при этом клавиатура используется в режиме MEDIUM_RAW.
какой смысл его было повторять авторам этой библиотеки?

каким же образом работает подсистема ввода?
как написать драйвер под свои кнопки, написав минимальный код и задействовав по макимуму уже написанный код в ядре?
cpl
Может проще задействовать чтение из устройства TTY, как стандартное последовательно асинхронное устройство ?
VDV
тогда надо написать tty драйвер для своих кнопок.
вполне логично.
но возникает вопрос:
что делает keyboard.c?
судя по всему, в него вынесен весь общий код для всех драйверов клавиатур.
то есть вроде бы достаточно написать только какую-то небольшую часть.
вот и хочется понять, можно ли задействовать то, что уже написано другими.
sasamy
Цитата(VDV @ May 24 2010, 16:29) *
что делает keyboard.c?
судя по всему, в него вынесен весь общий код для всех драйверов клавиатур.
то есть вроде бы достаточно написать только какую-то небольшую часть.
вот и хочется понять, можно ли задействовать то, что уже написано другими.


Можно - насколько знаю драйверы просто передают скан-коды драйверу keyboard.c а с ним уже взаимодействует система - можно назначить для любого скан-кода что угодно из пространства пользователя, там специальные утилиты есть.
etoja
Если всё испробовано и ничего не помогает, значит пора читать документацию:

LINUX DEVICE DRIVERS
THIRD EDITION
Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman

Вся книга занимает 11 мегабайт. Могу выложить, если модератор скажет куда.
А здесь титульные листы:
VDV
может, вы сможете мне показать то место в книге, где рассказано про драйвер клавиатуры?
про tty драйвер, да, там есть.
может, при этом вы сможете объяснить смысл последнего абзаца на стр. 559?
что значит "to “push” the data to the user"?
везде, где я видел код общения с tty драйвером, для получения данных используется read.
нигде не видел, чтобы ядро "уведомляло" о наличие данных в буфере.

Цитата(sasamy @ May 24 2010, 20:18) *
Можно - насколько знаю драйверы просто передают скан-коды драйверу keyboard.c а с ним уже взаимодействует система - можно назначить для любого скан-кода что угодно из пространства пользователя, там специальные утилиты есть.


а есть где-то описание:
- как взаимодействовать с драйвером keyboard.c? можно, конечно, проанализировать несколько драйверов клавиатур, но это как-то через альпы.
- как при этом создать свое отдельное клавиатурное устройство? я так понимаю, если делать в лоб, после подключения к keyboard.c оно станет /dev/tty, видимо. а было бы неплохо иметь способ сделать его при необходимости /dev/myttykey
mdmitry
stdin c клавиатуры, stdout куда надо, stderr как надо. Три потока и работать как с потоками. Нажатие кнопок обрабатывать своим драйвером.
Idle
ещё есть "Essential Linux device drivers" book, есть ли сабж точно - не скажу, посмотрел мельком
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.