Глава 18, TTY драйверы |
Предыдущая Содержание Следующая |
Устройство tty получило своё название от очень старого сокращения, применяемого для телетайпа, и первоначально связанного только с физическим или виртуальным терминалом, подключенного к Unix машине. Со временем это название также стало означать любое устройство, похожее на последовательный порт, такое как терминальное соединение, которое могло бы также быть создано с использованием такого соединения. Примерами физических tty устройств являются последовательные порты, преобразователи из USB в последовательный порт, а также некоторые виды модемов, которым для правильной работы необходима специальная обработка (такие, как традиционные устройства в стиле Win-модемов). Виртуальные tty устройства поддерживают виртуальные консоли, которые используются в компьютере для логирования, работающие с помощью клавиатуры, через сетевое соединение, либо через сессию xterm.
Ядро tty драйвера Linux находится прямо под уровнем стандартного символьного драйвера и предоставляет набор возможностей, направленных на предоставление интерфейса для использования устройствами терминального стиля. Ядро отвечает одновременно за управление потоком данных через tty устройство и формат данных. Это позволяет tty драйверам сосредоточиться на обработке данных для и от оборудования, а не беспокоиться о том, как единообразным образом управлять взаимодействием с пользовательским пространством. Для управления потоком данных существует ряд различных дисциплин линии, которые могут быть виртуально "подключены" к любому tty устройству. Это выполняется разными драйверами дисциплины tty линии.
Как показывает Рисунок 18-1, ядро tty принимает данные от пользователя, который послал их tty устройство. Затем оно передает их в драйвер дисциплины tty линии, которая затем передает их в драйвер tty. tty драйвер преобразует данные в формат, который может быть отправлен в оборудование. Данные, принимаемые из tty оборудования, передаются обратно наверх через tty драйвер, в драйвер дисциплины tty линии и в tty ядро, откуда они могут быть получены пользователем. Иногда tty драйвер взаимодействует непосредственно с tty ядром и tty ядро отправляет данные непосредственно в tty драйвер, но обычно дисциплина tty линии имеет шанс изменить данные, которые передаются между ними.
Рисунок 18-1. Обзор ядра tty
Драйвер tty никогда не видит дисциплины tty линии. Драйвер не может ни взаимодействовать непосредственно с дисциплиной линии, ни даже осознавать её наличия. Работой драйвера является отформатировать данные, которые ему отправлены, таким образом, чтобы оборудование смогло их понять, и принимать данные от оборудования. Работой дисциплины tty линии является определённым образом форматировать данные, полученные от пользователя или оборудования. Данное форматирование обычно выполняется в форме преобразования протоколов, таких как PPP или Bluetooth.
Существуют три разных типа tty драйверов: консольный, последовательного порта и pty (всевдо-терминала). Драйверы консоли и pty уже написаны и, вероятно, являются единственно необходимыми из этих типов tty драйверов. Это позволяет любым новым драйверам использовать ядро tty для взаимодействия с пользователем и системой, подобно драйверам последовательного порта.
Чтобы определить, какие типы tty драйверов в данный момент загружены в ядро, и какие tty устройства присутствуют в настоящее время, посмотрите в файл /proc/tty/drivers. Этот файл состоит из списка присутствующих в данный момент времени различных tty драйверов, показывая имя драйвера, имя узла по умолчанию, старший номер для драйвера, диапазон младших номеров, используемых драйвером, и тип tty драйвера. Ниже приведён пример такого файла:
/dev/tty /dev/tty 5 0 system:/dev/tty /dev/console /dev/console 5 1 system:console /dev/ptmx /dev/ptmx 5 2 system /dev/vc/0 /dev/vc/0 4 0 system:vtmaster usbserial /dev/ttyUSB 188 0-254 serial serial /dev/ttyS 4 64-67 serial pty_slave /dev/pts 136 0-255 pty:slave pty_master /dev/ptm 128 0-255 pty:master pty_slave /dev/ttyp 3 0-255 pty:slave pty_master /dev/pty 2 0-255 pty:master unknown /dev/tty 4 1-63 console
Каталог /proc/tty/driver/ содержит отдельные файлы для некоторых из драйверов tty, если они реализуют такую функциональность. Драйвер по умолчанию для последовательного порта создаёт в этом каталоге файл, показывающий много специфичной информации об оборудовании последовательного порта. Информация о том, как создать файл в этом каталоге, представлена ниже.
Все tty устройства, зарегистрированные в настоящее время и присутствующие в ядре, имеют свой собственный подкаталог в /sys/class/tty. Внутри этого подкаталога есть файл "dev", который содержит старший и младший номер, присвоенный этому tty устройству. Если драйвер сообщает ядру расположение физического устройства и драйвер, связанный с tty устройством, оно создаёт к ним символьные ссылки. Пример этого дерева:
/sys/class/tty/ |-- console | `-- dev |-- ptmx | `-- dev |-- tty | `-- dev |-- tty0 | `-- dev ... |-- ttyS1 | `-- dev |-- ttyS2 | `-- dev |-- ttyS3 | `-- dev ... |-- ttyUSB0 | |-- dev | |-- device -> ../../../devices/pci0000:00/0000:00:09.0/usb3/3-1/3-1:1.0/ttyUSB0 | `-- driver -> ../../../bus/usb-serial/drivers/keyspan_4 |-- ttyUSB1 | |-- dev | |-- device -> ../../../devices/pci0000:00/0000:00:09.0/usb3/3-1/3-1:1.0/ttyUSB1 | `-- driver -> ../../../bus/usb-serial/drivers/keyspan_4 |-- ttyUSB2 | |-- dev | |-- device -> ../../../devices/pci0000:00/0000:00:09.0/usb3/3-1/3-1:1.0/ttyUSB2 | `-- driver -> ../../../bus/usb-serial/drivers/keyspan_4 `-- ttyUSB3 |-- dev |-- device -> ../../../devices/pci0000:00/0000:00:09.0/usb3/3-1/3-1:1.0/ttyUSB3 `-- driver -> ../../../bus/usb-serial/drivers/keyspan_4
|
Предыдущая Содержание Следующая |