Готовый перевод Linux Device Drivers 3 / Драйверы устройств Линукс (третье издание): Chapter 18. TTY Drivers
Глава 18 TTY-драйверы
TTY-драйверы получили свое название от очень старой
аббревиатуры слова teletypewriter (телетайп) и первоначально
связывались только с физическим или виртуальным терминальным
соединеним с Unix-машиной. Позже это название стало применяться к
последовательному порту, который может использоваться как
терминальное соединение. Примерами физического tty-устройства могут
служить: устройство последовательного порта, преобразователь
USB-последовательный порт, некоторые типа модемов нуждающиеся в
специальной обработке данных, чтобы правильно функционировать (такие
как Win-модемы). Виртуальные tty-устройства служат для поддержки
виртуальной консоли, которые используются для регистрации в
компьютере, через сетевое соединение или сессию X-терминала.
Ядро tty-устройств в Linux (или просто tty-ядро), находится ниже
уровня стандартных символьных устройств и предоставляет интерфейс
для использования с терминальными устройствами. Ядро tty-устройств
отвечает за управление потоком данных через tty-устройство и структуру
этих данных. Это позволяет tty-драйверам сосредотачиваться на
обработке данных из и к устройству и не думать о взаимодействии с
пространством пользователя. Во многих драйверах, для управления
потоком данных, используются различные «line disciplines»1, которые
могут виртуально встраиваться в tty-устройство.
На рисунке 18-1 показано как tty-ядро берет данные пользователя и
посылает их в tty-устройство. Затем оно передает данные в драйвер tty line
discipline, который передает их в tty-драйвер. Tty-драйвер преобразует
данные в формат пригодный для физической передачи. Данные, принятые
из аппаратного обеспечения, передаются назад через tty-драйвер в
драйвер «tty line discipline», и затем в ядро tty-устройств, откуда они могут
быть приняты пользователем. Иногда tty-драйвер соединяется напрямую с
ядром tty-устройств, и ядро посылает данные прямо в tty-драйвер, но
обычно между ними находится драйвер «tty line discipline», который
может внести изменения в данные.
Рисунок 18-1 Обзор tty-ядра
Tty-драйвер не видит драйвера tty line discipline, и даже не
догадывается, что он есть. Драйвер не может сообщаться
непосредственно с tty line discipline. Работа tty-драйвера заключается в
формировании структуры данных понятных для аппаратного обеспечения,
и приеме данных от него. Tty line discipline определяет, каким образом
данные должны преобразовываться при их получении от пользователя
или аппаратного обеспечения. Формирование структуры данных обычно
зависит от требований протокола, какого как PPP или Bluetooth.
Имеются три различных типа tty-драйверов: консоль,
последовательный порт и pty. Драйверы для консоли и tty уже написаны,
и вероятно вам потребуется только один тип. Это все возможные новые
устройства, использующиеся для взаимодействия с пользователем и
системами типа драйвера последовательного порта.
Отличаются эти типы tty-драйверов процедурой загрузки в ядро и
тем, что tty-устройство можно увидеть в файле /proc/tty/drivers. Этот
файл состоит из списка присутствующих tty-драйверов, там указывается
имя драйвера, имя node по умолчанию, старший номер драйвера,
диапазон используемых младших номеров и тип 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
1. прим. переводчика: line disciplines – порядок обслуживания линии. Ядро
обрабатывает tty-устройства как места, куда может быть подключено сетевое
обарудование. Поэтому tty-драйвер может по разному обрабатывать данные, в
зависимости от line discipline. С заданной по умолчанию line discipline, драйвер просто
передает каждый символ, который получил. Когда выбрана line discipline для SLIP или
PPP драйвер читает блок данных, создает его заголовок для правильной обработки
,
принимающей стороной и передает новый блок данных в сеть.
Внимание! Этот перевод, возможно, ещё не готов.
Его статус: перевод редактируется
Переведено на Нотабеноиде
http://notabenoid.org/book/11832/38398
Переводчики: hardorsoft
Настройки
Готово:
