Глава 13, USB драйверы |
Предыдущая Содержание Следующая |
Universal Serial Bus (USB, Универсальная Последовательная Шина) является соединением между компьютером и несколькими периферийными устройствами. Первоначально она была создана для замены широкого круга медленных и различных шин, параллельной, последовательной и клавиатурного соединений, на один тип шины, чтобы к ней могли подключаться все устройства. (* Части этой главы основаны на находящейся в ядре документации для USB кода ядра Linux, который был написан разработчиками ядра USB и выпущен под GPL.) USB развилась позже этих медленных соединений и в настоящее время поддерживает практически любой тип устройства, который может быть подключен к ПК. Последние версии спецификации USB добавили высокоскоростное соединение с теоретическим пределом скорости в 480 Мбит/с.
Топологически, подсистема USB не выходит наружу как шина; скорее, это дерево, построенное из нескольких соединений "точка-точка". Соединения представляют собой четырёх-проводные кабели (земля, питание и два сигнальных провода), которые соединяют устройство и концентратор (хаб), подобно витой паре Ethernet. Контроллер узла (хост) USB отвечает на запросы каждого USB устройства, если оно имеет какие-либо данные для передачи. Из-за такой топологии USB стройство никогда не может начать передачу данных не будучи сначала запрошенным хост-контроллером. Такая конфигурация позволяет очень легко реализовать систему plug-and-play (включай и работай), в которой устройства могут автоматически конфигурироваться хост-компьютером.
Шина очень проста на технологическом уровне, поскольку это реализация с одним мастером, в которой хост-компьютер опрашивает разнообразные периферийные устройства. Несмотря на это внутреннее ограничение, шина имеет несколько интересных особенностей, таких как возможность для устройства запросить фиксированную полосу пропускания для передачи данных для надёжной поддержки ввода/вывода видео и аудио. Другой важной особенностью USB является то, что она выступает лишь в качестве канала связи между устройством и хостом, не требуя особого понимания или структур для доставляемых данных. (* На самом деле, некоторые структуры есть, но это в основном сводится к требованию, чтобы взаимодействие вписывались в один из нескольких предопределённых классов: например, клавиатура не будет выделять полосу пропускания, в то время как некоторые видео-камеры будут.)
Спецификации протокола USB определяют набор стандартов, которым может следовать любое устройство определённого типа. Если устройство следует такому стандарту, специальный драйвер для этого устройства не требуется. Эти разные типы называются классами и состоят из таких вещей, как устройства хранения данных, клавиатуры, мыши, джойстики, сетевые устройства и модемы. Другие типы устройств, которые не вписываются в эти классы, требуют от поставщика собственного драйвера, написанного для данного специфического устройства. Видео устройства и устройства для преобразования USB в последовательный интерфейс являются хорошим примером, когда не существует определённого стандарта и каждому устройству от разных производителей необходим драйвер.
Эти особенности, вместе с присущей ей конструкции возможности горячего подключения, делают USB удобным, недорогим механизмом для подключения (и отключения) нескольких устройств к компьютеру без необходимости выключения системы, открывания крышки и ругани, имея дело с винтами и проводами.
Ядро Linux поддерживает два основных типа драйверов USB: драйверы на хост-системе и драйверы на устройстве. USB драйверы для хост-системы управляют USB-устройствами, которые к ней подключены, с точки зрения хоста (обычно хостом USB является персональный компьютер.) USB-драйверы в устройстве контролируют, как одно устройство видит хост-компьютер в качестве устройства USB. Поскольку термин "драйверы устройств USB" очень запутывает, разработчики USB создали термин "драйверы USB гаджетов (приспособлений)", чтобы описать, что этот драйвер управляет устройством USB, которое подключается к компьютеру (вспомните, что Linux также работает в тех крошечных встраиваемых устройствах). В этой главе подробно рассказывается, каким образом на персональном компьютере работает система USB. Драйверы USB приспособлений в данный момент времени находятся за рамками этой книги.
Как показано на Рисунке 13-1, USB драйверы находятся между различными подсистемами ядра (блочными, сетевыми, символьными и так далее) и аппаратными USB контроллерами. Ядро USB предоставляет интерфейс для драйверов USB, используемый для доступа и управления USB оборудованием, без необходимости беспокоится о различных типах аппаратных контроллеров USB, которые присутствуют в системе.
Рисунок 13-1. Обзор USB драйвера
|
Предыдущая Содержание Следующая |