реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> драйвер клавиатуры, как написать?
VDV
сообщение May 24 2010, 11:15
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 152
Регистрация: 18-03-06
Пользователь №: 15 366



есть: несколько кнопок.
надо: чтобы нажатие на них воспринималось как нажатие заданных кнопок на клавиатуре.

непонятно как это сделать, ибо:
драйвер клавиатуры - это обычно /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.
какой смысл его было повторять авторам этой библиотеки?

каким же образом работает подсистема ввода?
как написать драйвер под свои кнопки, написав минимальный код и задействовав по макимуму уже написанный код в ядре?
Go to the top of the page
 
+Quote Post
cpl
сообщение May 24 2010, 12:21
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 378
Регистрация: 6-12-04
Пользователь №: 1 340



Может проще задействовать чтение из устройства TTY, как стандартное последовательно асинхронное устройство ?
Go to the top of the page
 
+Quote Post
VDV
сообщение May 24 2010, 13:29
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 152
Регистрация: 18-03-06
Пользователь №: 15 366



тогда надо написать tty драйвер для своих кнопок.
вполне логично.
но возникает вопрос:
что делает keyboard.c?
судя по всему, в него вынесен весь общий код для всех драйверов клавиатур.
то есть вроде бы достаточно написать только какую-то небольшую часть.
вот и хочется понять, можно ли задействовать то, что уже написано другими.
Go to the top of the page
 
+Quote Post
sasamy
сообщение May 24 2010, 16:18
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858



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


Можно - насколько знаю драйверы просто передают скан-коды драйверу keyboard.c а с ним уже взаимодействует система - можно назначить для любого скан-кода что угодно из пространства пользователя, там специальные утилиты есть.
Go to the top of the page
 
+Quote Post
etoja
сообщение May 25 2010, 07:26
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 121
Регистрация: 14-01-05
Из: Москва
Пользователь №: 1 952



Если всё испробовано и ничего не помогает, значит пора читать документацию:

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

Вся книга занимает 11 мегабайт. Могу выложить, если модератор скажет куда.
А здесь титульные листы:
Прикрепленные файлы
Прикрепленный файл  ch_TITLE.pdf ( 395.7 килобайт ) Кол-во скачиваний: 186
 
Go to the top of the page
 
+Quote Post
VDV
сообщение May 25 2010, 08:37
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 152
Регистрация: 18-03-06
Пользователь №: 15 366



может, вы сможете мне показать то место в книге, где рассказано про драйвер клавиатуры?
про 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
Go to the top of the page
 
+Quote Post
mdmitry
сообщение May 25 2010, 09:31
Сообщение #7


Начинающий профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 25-10-06
Из: СПб
Пользователь №: 21 648



stdin c клавиатуры, stdout куда надо, stderr как надо. Три потока и работать как с потоками. Нажатие кнопок обрабатывать своим драйвером.


--------------------
Наука изощряет ум; ученье вострит память. Козьма Прутков
Go to the top of the page
 
+Quote Post
Idle
сообщение May 25 2010, 18:04
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874



ещё есть "Essential Linux device drivers" book, есть ли сабж точно - не скажу, посмотрел мельком
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 1st August 2025 - 18:47
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016