Глава 18, TTY драйверы

Предыдущая  Содержание  Следующая V*D*V

Глава 18

 

Устройство 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

Рисунок 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

 

Предыдущая  Содержание  Следующая