Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): Chapter 18. TTY Drivers

Оглавление
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

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

hardorsoft 26.10.10 в 06:01

0

TTY-драйверы получили свое название от очень старой
аббревиатуры слова teletypewriter (телетайп) и первоначально
связывались только с физическим или виртуальным терминальным
соединеним с Unix-машиной. Позже это название стало применяться к
последовательному порту, который может использоваться как
терминальное соединение. Примерами физического tty-устройства могут
служить: устройство последовательного порта, преобразователь
USB-последовательный порт, некоторые типа модемов нуждающиеся в
специальной обработке данных, чтобы правильно функционировать (такие
как Win-модемы). Виртуальные tty-устройства служат для поддержки
виртуальной консоли, которые используются для регистрации в
компьютере, через сетевое соединение или сессию X-терминала.

hardorsoft 26.10.10 в 06:01

0

Ядро tty-устройств в Linux (или просто tty-ядро), находится ниже
уровня стандартных символьных устройств и предоставляет интерфейс
для использования с терминальными устройствами. Ядро tty-устройств
отвечает за управление потоком данных через tty-устройство и структуру
этих данных. Это позволяет tty-драйверам сосредотачиваться на
обработке данных из и к устройству и не думать о взаимодействии с
пространством пользователя. Во многих драйверах, для управления
потоком данных, используются различные «line disciplines»1, которые
могут виртуально встраиваться в tty-устройство.

hardorsoft 26.10.10 в 06:01

0

На рисунке 18-1 показано как tty-ядро берет данные пользователя и
посылает их в tty-устройство. Затем оно передает данные в драйвер tty line
discipline, который передает их в tty-драйвер. Tty-драйвер преобразует
данные в формат пригодный для физической передачи. Данные, принятые
из аппаратного обеспечения, передаются назад через tty-драйвер в
драйвер «tty line discipline», и затем в ядро tty-устройств, откуда они могут
быть приняты пользователем. Иногда tty-драйвер соединяется напрямую с
ядром tty-устройств, и ядро посылает данные прямо в tty-драйвер, но
обычно между ними находится драйвер «tty line discipline», который
может внести изменения в данные.

hardorsoft 26.10.10 в 06:03

0

Рисунок 18-1 Обзор tty-ядра

hardorsoft 26.10.10 в 06:03

0

Tty-драйвер не видит драйвера tty line discipline, и даже не
догадывается, что он есть. Драйвер не может сообщаться
непосредственно с tty line discipline. Работа tty-драйвера заключается в
формировании структуры данных понятных для аппаратного обеспечения,
и приеме данных от него. Tty line discipline определяет, каким образом
данные должны преобразовываться при их получении от пользователя
или аппаратного обеспечения. Формирование структуры данных обычно
зависит от требований протокола, какого как PPP или Bluetooth.

hardorsoft 26.10.10 в 06:03

0

Имеются три различных типа tty-драйверов: консоль,
последовательный порт и pty. Драйверы для консоли и tty уже написаны,
и вероятно вам потребуется только один тип. Это все возможные новые
устройства, использующиеся для взаимодействия с пользователем и
системами типа драйвера последовательного порта.

hardorsoft 26.10.10 в 06:03

0

Отличаются эти типы tty-драйверов процедурой загрузки в ядро и
тем, что tty-устройство можно увидеть в файле /proc/tty/drivers. Этот
файл состоит из списка присутствующих tty-драйверов, там указывается
имя драйвера, имя node по умолчанию, старший номер драйвера,
диапазон используемых младших номеров и тип tty-драйвера. Вот пример
этого файла:

hardorsoft 26.10.10 в 06:04

0

/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

hardorsoft 26.10.10 в 06:04

0

Каталог /proc/tty/driver/ содержит индивидуальные файлы для
таких tty-драйверов, если они реализуют свои функции. По умолчанию
последовательный драйвер создает файлы в этом каталоге, которые
предоставляют информацию об аппаратном обеспечении
последовательного порта. Позже будет рассказано, как создать такие
файлы.

hardorsoft 26.10.10 в 06:04

0

Все зарегистрированные и загруженные в ядро tty-устройства имеют
собственный подкаталог в /sys/class/tty. В этих подкаталогах имеется
файл «dev», который содержит старший и младший номер назначенный
tty-устройству. Если драйвер сообщает ядру расположение физического
устройства и драйвера, ассоциированного с tty-устройством, то создается
символьная ссылка на них. Пример этого дерева каталогов:

hardorsoft 26.10.10 в 06:04

0

/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

hardorsoft 26.10.10 в 06:02

0

1. прим. переводчика: line disciplines – порядок обслуживания линии. Ядро
обрабатывает tty-устройства как места, куда может быть подключено сетевое
обарудование. Поэтому tty-драйвер может по разному обрабатывать данные, в
зависимости от line discipline. С заданной по умолчанию line discipline, драйвер просто
передает каждый символ, который получил. Когда выбрана line discipline для SLIP или
PPP драйвер читает блок данных, создает его заголовок для правильной обработки
,
принимающей стороной и передает новый блок данных в сеть.

hardorsoft 26.10.10 в 06:02

0
Минутку...