Здесь задействовано 2 или более отдельных аппаратных компонента:
- контроллер PS / 2 (который в основном является просто прославленным контроллером последовательного порта)
- независимо от того, что подключено к немупервый порт PS / 2 (клавиатура, мышь, сенсорный экран, сканер штрих-кода, ...)
- независимо от того, что произошло, подключен ко второму порту PS / 2
Когда задействованы отдельные части оборудования, лучше всего иметь отдельные драйверы:
что-то, что обрабатывает контроллер PS / 2;включая обработку «устройства горячей вставки», идентификацию устройства и запуск соответствующего драйвера для идентифицированного устройства;и включая предоставление «get_byte()
/ send_byte()
» интерфейса для использования другими драйверами.
драйвер для каждого типа устройства, которое может быть подключено (клавиатура, мышь, сенсорная панельэкран, сканер штрих-кода, ...);который не касается ни одного из портов ввода-вывода контроллера PS / 2 и взаимодействует только с драйвером контроллера PS / 2 (через интерфейс «get_byte()
/ send_byte()
», предоставляемый драйвером контроллера PS / 2).
Обратите внимание, что (в целом, за исключением сценариев «аппаратное устройство» в ноутбуках) нет абсолютно никаких причин, по которым нельзя подключить две клавиатуры PS / 2 (с двумя отдельными экземплярами)точно такого же «драйвера клавиатуры PS / 2»);или две мыши PS / 2, или сканер штрих-кода и сенсорный экран (без клавиатуры и мыши), или любая другая комбинация любых типов устройств в любых портах PS / 2.Также (если вам нравится переносимость) нет причин, по которым одна и та же клавиатура / мышь PS / 2 / любые другие драйверы устройств не могут работать «как есть» (с перекомпиляцией и ничего более) на совершенно разных архитектурах с совершенно разными контроллерами PS / 2.(например, контроллер PL050 PS / 2, который есть в некоторых системах ARM), просто потому, что драйвер для совершенно другого контроллера PS / 2 может обеспечить точно такой же интерфейс "get_byte()
/ send_byte()
".
Дляконтроллер «8042» PS / 2 на ПК 80x86;вам, вероятно, следует прочитать (если не следовать) последовательность инициализации, описанную здесь: https://wiki.osdev.org/%228042%22_PS/2_Controller#Initialising_the_PS.2F2_Controller
Если вы не инициализируете контроллер PS / 2 должным образом (например, просто используете «random» в любом состоянии, когда произошла ошибка)in by boot loader ") тогда он мог остаться с включенной ужасной функцией перевода, когда данные с устройства преднамеренно искажаются контроллером для обратной совместимости с исходными машинами IBM XT (до того, как существовал код 2 набора сканирования);где современная клавиатура отправляет байты для набора кодов сканирования 2, но контроллер PS / 2 преобразует их в значения, совместимые с набором кодов сканирования 1, вызывая такие вещи, как (например), если вы нажимаете 9, вы получаете q, если вы нажимаете 0, выхм ... ".