Описание тега lesotho
Я пытался несколько неудачных разобраться в том, как бить клавиши на клавиатуре заканчивается теперь байт прописан в stdin.
Я понимаю, что есть
- разные ядра, разные версии
- разных клавиатур, добавленные разными методами интерфейсов (USB,PS/2 и....)
- различные символы/символы, напечатанные на клавиатуре, поскольку не все человеческие языки были бы счастливы с несколько Азбука 2x26....
Поэтому вопрос будет помочь мне понять, как особый случай придет, чтобы быть. В этом случае будет то, что пожилой ViewSonic ноутбук , который использует PS/2 для i8042
и запускает ядро Linux (3.2.XXX, но я думаю не сильно изменилась на более свежую версию) и который в userpace-земля xorg-сервера работает.
На вопрос можно ответить эскиз и если можно кратко объясните действия, которые происходят с помощью нажатия клавиши на клавиатуре. Пусть это будет ключ, который на клавиатуре с "(США)йцукен"-букв, напечатанных на ней, будет ключ, который показывает"".
Мое текущее понимание (которое, возможно, нуждается в коррекции и, конечно, экспансия) осуществляется в качестве отправной точки.
- На компьютере oqo была загружена и ядра сделали все это
[ 1.369312] i8042: ФНП: PS/2 контроллер [PNP0303:КБД PNP0f13:МОУ] на 0x60,0x64 прерывание 1,12 [ 1.373640] Серио: i8042 РЭОЗ порта 0x60,0x64 прерывание 1 [ 1.373710] Серио: i8042 AUX порт на 0x60,0x64 прерывание 12 [ 1.377773] вход: в переводе набор 2 клавиатуры /устройства/платформы/i8042/serio0/ввод/input3 не [ 14.362974] вход: ТЭС/2 в IBM Трэкпоинт как /устройства/платформы/i8042/serio1/ввод/input11
- в
файле xorg
сервер и терминал emulater на переднем плане работает (например,в xterm
) - Человеческого существа в передней части клавиатуры просмотров ключ с надписью "А"
- На
ПС/2
Клавиатура соединяется черезпорт PS/2
-протокол кПС/2
контроллер, который является в данном случаеi8042
. Общение подразумевает, чтоПС/2
контроллер считывает байты0x1e
и (если "это" лежало в ближайшее время, а потом опять выпустят)0x9e
. Байты на этом этапе называются клавиатурыскан
. - На
ПС/2
контроллер, чем не создать прерываний процессора (который является х86 арки в ноутбук), который запускает код ядра, который поддерживает прерывания. В данном случае это ядро Linux и, глядя на исходный следующие объекты ядра системы каскадно в обработке прерываний: (первыйЛинукс/драйверы/ввод/Серио/i8042.С
вместе сОС Linux/драйверы/ввод/ - Серио/Серио.с
которого затем обработать вещи и позвонитьв Linux/драйверы/ввода/клавиатуры/atkbd.с
которыми потом, возможно, переходит на вещи дляОС Linux/драйверы/телетайп/Вт/клавиатура.с
). С уважением от двух "скан" байт, что PS/2 получала сама себя, она может сделать что-то с ними, но к моему understandig в основном передать их в неизменном виде. Так что ядро Linux получает получить 0x1e (и в конечном итоге также 0x9e) байт (скан
из PS2-cotroller для того) из данных реестраi8042
(статические инт i8042_data_reg = 0x60;
как определено влинукс/драйверы/ввод/Серио/i8042-x86ia64io.ч
, который подходит для ViewSonic ноутбук, процессор). - Теперь перед пользовательских приложений ГЭЭ вся эта информация (т. е. скан) этот скан-код преобразуется в код ключа (это может произойти в ядре, а может и нет). Уне причине, что было понятно, почему такое сопоставление должно происходить, если мы нажали на
паузу
клавиши вместо двух байт (одно для пресса и одно для выхода), мы получаем последовательность байтов, которая имеет выход:0xe1 0x1d 0х45 0xe1 0x9d 0xc5
. Учитывая, что один байт может содержать 256 значений и большинство клавиатур не даже приблизиться к тому, что многие количество кнопок не совсем понятно, почему побег был использован здесь.
На данный момент мы сделали его от клавиатуры скан
->ПС/2-контроллер скан-код
->код
.
Но это не конец истории, потому что пользовательских не занимается входного сигнала в код формата, который становится ясно, что "A" и "A" может быть как результат нажатия "а" ключа в зависимости от того, если "сдвиг" основные пути придавлена. Поэтому путем физического нажатия клавиши на клавиатуре, чтобы в пользовательском пространстве программой онтоп ядра Linux и в файл xorg
сервер еще не закончен. Следующие шаги я ожидаю, чтобы иметь место
- Файл xorg делает какой-то супер-магию (keysymbols, keytypes, контурные карты, keygeometries, keyvariants), который просто поворачивает ключ в keysympol что может быть к примеру последовательность байт, когда в utf8 в Юникод используется
8.В keysymbol байт затем отправить
файл xorg
клиентских приложений, т. е.в xterm
, например
Это было здорово, если бы кто-то отвечая на вопрос, можно объяснить подобную историю о том, что происходит с физическим нажатие
на некоторые устройства stdin/ФД читать внутри пользовательского
приложения.
Если, как вероятно, какие-то ошибки были в описании шахты выше буду признателен за ответы на них указываешь.
Надеюсь, что этот вопрос даст ответов, что эскиз от Одна из жестких нажатия клавиши в байт, прибывающих в пользовательские
приложения.