Теоретические положения.
Драйвер устройства ввода состоит из двух главных компонент: § группы модулей; § одной библиотеки, используемой при операциях с этими модулями. При запуске, модули связываются вместе, образуя канал для получения данных от устройства ввода, обработки этих данных и вывода их в ОС. Существует три типа модулей: § модули устройства; § модули протокола; § модули фильтров. Модули обычно располагаются следующим образом (см. рис.1), формируя «шину событий ввода».
Рис. 1 – Шина событий ввода. Данные от устройства последовательно проходят по шине событий ввода и поступают в ОС. Команды настройки устройства, наоборот, проходят по шине в направлении к устройству. Существует три типа шин событий ввода: § относительная; § абсолютная; § клавиатурная; Термин «относительная» означает только то, что устройство предоставляет данные о положении указывающего элемента, привязанные по координатам к предыдущим полученным от устройства данным. Такой метод указания координат использует обычно мышь. «Абсолютная» шина событий ввода используется с устройствами (например, графические планшеты), которые выдают абсолютные координаты указующего элемента. «Клавиатурная» шина событий ввода является той, которая обслуживает клавиатурное устройство, выдающее коды клавиш при нажатии и отпускании каждой клавиши. Как отмечалось ранее, существует три типа модулей. Модуль устройства отвечает за связь с аппаратным или программным устройством. Он обычно не разбирается в формате данных, поставляемых устройством, в его обязанности входит только получение данных от устройства. Модуль протокола обрабатывает данные, полученные от модуля устройства в соответствии с соответствующим протоколом. Модуль фильтра обеспечивает последующую обработку данных, специфическую для каждого типа шины событий ввода. Модули связываются вместе в соответствии с параметрами командной строки при запуске драйвера устройства ввода. Командная строка имеет следующий формат: devi-driver_name [options] protocol [protocol_options] [device [device_options]] [filter [filter_options]] Например: devi-hirun ps2 kb -2 & где командная строка состоит из следующих элементов: hirun – стандартных драйвер клавиатуры и мыши, работающий на большинстве систем. ps2 – определяет протокол PS/2 для взаимодействия с мышью – трех байтовый протокол, для отображения движения мыши и состояния ее клавиш. kb – определяет, что последующие опции будут относиться к модулю устройства, совместимого со стандартным контроллером клавиатуры PC 8042. -2 – сообщает модулю устройства клавиатуры, что следует установить связь с его вторым (внешним) портом, который нужен для мыши PS/2. Не следует напрямую указывать тип модуля фильтра, так как он будет выбран автоматически, в соответствии с типом шины событий ввода, который будет установлен после обработки, например, аргумента ps2. Формат командной строки стандартного драйвера устройств ввода ОСРВ QNX 6.2.1: devi-hirun [options] protocol [protocol_options] [device [device_options]] [filter [filter_options]] Аргументы: Группа аргументов options: -P – отключить ввод событий в интерфейс Фотон (по умолчанию ввод событий осуществляется в интерфейс Фотон); -r запустить интерфейс диспетчера устройств (только если не используется интерфейс Фотон); -b – не допускать выхода по CASB (по умолчанию выход по CASB разрешен) -d – идентификатор устройства интерфейса Фотон (по умолчанию /dev/photon или содержимое переменной окружения PHOTON); -g – группа ввода (по умолчанию 1); -v – увеличить многословность (по умолчанию выкл.); -l list – выводит список внутренних модулей драйвера. Значения protocol: msoft [msoft_opts] [fd fd_opts]|[uart_8250 uart_8250_opts] msys [msys_opts] [fd fd_opts]|[uart_8250 uart_8250_opts] ps2 [mousedev mousedev_opts] kbd [kbd_opts] [kbddev kbddev_opts]|[fd fd_opts] Модули протокола и их аргументы [protocol_options]: msoft – определяет совместимый с Microsoft/IntelliMouse протокол для последовательного порта: -b baud – бодовая скорость последовательного устройства (по умолчанию 1200); -3 – трех кнопочная мышь Microsoft; -R – не сбрасывать мышь при загрузке (по умолчанию – сбрасывать); -i – протокол мыши IntelliMouse (с колесом); msys – протокол мыши Mouse Systems (Logitech): -b baud – бодовая скорость последовательного устройства (по умолчанию 1200); -R – не сбрасывать мышь при загрузке (по умолчанию – сбрасывать); ps2 – мышь ps/2 – нет аргументов. kbd – скан-коды клавиатуры (подсоединенной как первичная): -k rate[,delay] – частота (rate, Гц) и задержка (delay) (по умолчанию (40Гц, 1000мсек) (работает только в сочетании с модулем устройства клавиатуры); -p filename – создает и открывает для записи файл filename типа FIFO и дублирует в него все данные, посылаемые на уровень модуля фильтра; -f filename – создает и открывает для записи файл filename и дублирует в него все данные, посылаемые на уровень модуля фильтра; -r – сброс устройства при сбросе протокола; -R – не сбрасывать устройство при сбросе протокола; -s – драйверу устройства следует поставлять только правильные символы. Модули устройства и их аргументы [device_options]: fd – открывает устройство через функцию «open()»: -d device – идентификатор устройства, которое открывается по fd (по умолчанию /dev/ser1); -s – определяет интерфейс ввода как последовательный; -P priority – приоритет обработки событий ввода; uart – прямой доступ к UART 8250/16450/16550: -i irq – IRQ для последовательного устройства (по умолч. 4); -p ioport – порт ввода-вывода для последовательного устройства (по умолч. 3f8); -1 – использовать COM1; -2 – использовать COM2; -P priority – приоритет обработки событий ввода; kbddev – PS2-клавиатура: -f filename –создает и открывает для записи файл filename и дублирует в него все данные, посылаемые на уровень модуля протокола; -i irq –IRQ (по умолч. 1); -p ioport, add – порт (по умолч. 0x60), и значение смещения для доступа к порту состояния (по умолч. 4: 0x60 + 4 = 0x64); -r – сброс устройства при сбросе модуля; -P priority – приоритет обработки событий ввода; mousedev – PS2-мышь -f filename –создает и открывает для записи файл filename и дублирует в него все данные, посылаемые на уровень модуля протокола; -i irq – IRQ (по умолч. 12); -p ioport, add – порт (по умолч. 0x60), и значение смещения для доступа к порту состояния (по умолч. 4: 0x60 + 4 = 0x64); -r – сброс устройства при сбросе модуля; -P priority – приоритет обработки событий ввода;
|