headermask image


Advertisement

LPI 101. Аппаратные средства и архитектура. USB устройства

Обзор USB

В этом разделе мы рассмотрим поддержку Universal Serial Bus (Универсальной последовательной шины) или USB устройств в Linux. USB была разработана консорциумом компаний с целью предоставить единственную, простую шину для подключения периферии. В разделе Настройки BIOS, мы рассмотрели аспекты управления портами, IRQ и DMA ресурсами для машин с шиной ISA. Дизайн USB позволяет устройствам подключаться на лету и использовать стандартные гнезда для подключения устройств. USB-устройства включают клавиатуры, “мыши”, принтеры, сканеры, жесткие диски, flash-драйвы, камеры, модемы, сетевые адаптеры и колонки. Список продолжает расти. Имеющаяся в Linux поддержка довольно всеобъемлюща, хотя некоторые устройства требуют специальных драйверов а другие, преимущественно принтеры, могут не поддерживаться или могут поддерживаться частично.

Компьютерные системы могут обладать одним или более контроллерами или хабами, к которым могут подключаться USB устройство или другой (внешний) хаб. Хаб может поддерживать до 7 устройств, некоторые или каждое из которых могут иметь дополнительные хабы. Хаб внутри системного блока называется root hub (корневой хаб). Каждая такая звездоподобная топология может поддерживать до 127 хабов или устройств.

Замечание: Часто, мы говорим USB порт, подразумевая возможность поддержки USB в компьютере и гнездо для подключения (сравните с последовательным или параллельным портами), а не внутренний адрес порта, используемый устройством.

USB системы являются многослойными.

  1. Слой Bus Interface (Интерфейс шины) обеспечивает физическую, сигнальную, и пакетную связь между хостом и устройствами, обеспечивая передачу данных между хостом и устройствами.
  2. Слой Device (устройство) используется системным ПО для базовых USB-операций с устройстовм посредством шины. Это позволяет хосту определить характеристики устройства, включая класс устройства, имя производителя, имя устройства, требования к напряжению и многие другие функции наподобие скорости устройства и уровня поддержки USB.
  3. Слой Function (Функция) предоставляет дополнительные возможности, специфичные для устройства. Соответствие слоев хоста и ПО устройства позволяет выполнять функции, присущие устройству.

Ранние спецификации USB (1.0 и 1.1) поддерживали скорость до 12Mб/с (Мегабит в секунду). Устройства, соответствующие этим спецификациям соответственно являются низкоскоростными, это принтеры, “мыши”, клавиатуры, сканеры и модемы. Новая спецификация USB 2.0 поддерживает скорость до 480Мб/с, что сравнимо с жестким диском и внешним CD/DVD приводом. Некоторые USB 2.0 устройства имеют обратную совместимость, что позволяет использовать их в старых системах, хотя и не все скоростные устройства обладают ею. Если ваш компьютер не имеет встроенной поддержки USB 2.0, то вы можете воспользоваться PCI картой (или PC картой для ноутбука), предоставляющей один или несколько портов USB 2.0.

USB-кабель довольно тонок и содержит 4 провода: два для передачи сигнала плюс силовой и нейтральный. Разъём, подключаемый к хабу, имеет плоский прямоугольный штеккер (называемый А штеккер), а разъём, подключаемый к устройству или к хабу более низкого уровня имеет штеккер больше похожий на квадрат (называемый B штеккер). Несколько отличается существующий mini-B штеккер, для подсоединения к компьютеру небольших устройств вроде фотоаппарата. USB устройства и хабы могут получать питание по USB шине или могут иметь собственные источники питания.

Модуль поддержки USB в Linux

USB в настоящее время полностью поддерживается в Linux. Большая часть изменений проявилась в ветке ядра 2.6. Многое было перенесено из ядер 2.4, какая-то поддержка имеется даже в ядрах 2.2. Linux поддерживает как USB 2.0, так и ранние спецификации. Ввиду подключения на лету (горячего подключения), заложеной в самой природе USB, поддержка обычно производится посредством модулей ядра, которые могут загружаться или выгружаться по необходимости. В этом учебнике мы предполагаем, что все модули, которые вам необходимы для вашего дистрибутива или доступны, или уже установлены. Если вам необходимо скомпилировать свое собственное ядро, то обратитесь к теме 201 экзамена LPI 201(будет опубликовано далее)

После того, как вы убедитесь, что ваш компьютер имеет USB порты, вы можете посмотреть что обнаружила система Linux, использовав команду lspci, как показано в Листинге 23. Мы отфильтровали вывод, чтобы отобразить только устройства, соответствующие USB.

Листинг 23. Вывод команды lspci для USB устройств

[root@lyrebird root]# lspci | grep -i usb
00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM
(ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801DB/DBL/DBM
(ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM
(ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801DB/DBM
(ICH4/ICH4-M) USB2 EHCI Controller (rev 01)

Вы можете видеть, что в этой системе имеется четыре USB контроллера. Поля UHCI и EHCI показывают модули-драйвера, необходимые для поддержки контроллера. Корректный драйвер USB 1.1 зависит от чипсета, используемого в вашем контроллере. USB 2.0 требует EHCI драйвер плюс USB 1.1 драйвер. Смотри Таблицу 5.

Драйвер Чипсет
EHCI USB 2.0 Поддерживает – требует один UHCI, OHCI или
JE
UHCI Intel и VIA Чипсеты
JE Это альтернатива UHCI для ядер 2.4. Если
UHCI не работает, и у вас Intel или VIA
чипсет, то попробуйте JE
OHCI Compaq, большинство PowerMacs, iMacs, и PowerBooks, OPTi,
SiS, ALi

Мы рассматривали команду lsmod и файлы конфигурации модулей /etc/modules.conf (ядро 2.4) и /etc/modprobe.conf (ядро 2.6) ранее при обсуждении поддержки звука. В Листинге 24 показано несколько модулей, связанных с USB устройствами, которые загружаются в той же системе, что использовалась и в Листинге 23. В этой систем есть USB-мышь

Листинг 24. Использование lsmod для отображения загруженных USB модулей

[root@lyrebird root]# lsmod | egrep 'usb|hci|hid|mouse|Module'
Module Size Used by Not tainted
usbserial 23420 0 (autoclean) (unused)
mousedev 5524 1
hid 22244 0 (unused)
input 5888 0 [keybdev mousedev hid]
ehci-hcd 20008 0 (unused)
usb-uhci 25740 0 (unused)
usbcore 77376 1 [usbserial hid ehci-hcd usb-uhci]

Заметим однако, что модуль usbcore используется всеми остальными USB модулями наряду с модулем hid (human interface device — интерфейс пользовательских устройств).

Отображение информации о USB

Итак, теперь мы кое-что знаем о модулях поддержки USB, как мы можем обнаружить, что USB Устройство было подсоединено к компьютеру? Эта информация может быть обнаружена в систем файлов /proc/bus/usb. Файл /proc/bus/usb/devices содержит сводную информацию о подключенных в настоящее время USB устройствах. Частичный список для нашей системы приведен в Листинге 25.

Листинг 25. Часть содержимого /proc/bus/usb/devices

[root@lyrebird root]# cat /proc/bus/usb/devices
T: Bus=04 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=480 MxCh= 6
B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 2.00 Cls=09(hub ) Sub=00 Prot=01 MxPS= 8 #Cfgs= 1
P: Vendor=0000 ProdID=0000 Rev= 2.04
S: Manufacturer=Linux 2.4.21-32.0.1.EL ehci-hcd
S: Product=Intel Corp. 82801DB USB2
S: SerialNumber=00:1d.7
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 2 Ivl=256ms
T: Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 2
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
D: Ver= 1.00 Cls=09(hub ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=0000 ProdID=0000 Rev= 0.00
S: Product=USB UHCI Root Hub
S: SerialNumber=1840
C:* #Ifs= 1 Cfg#= 1 Atr=40 MxPwr= 0mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=09(hub ) Sub=00 Prot=00 Driver=hub
E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=255ms

Выделенное Spd=480 нами выше соответсвует шине USB 2.0, а Spd=12 — устройствам USB 1.1 (или возможно USB 1.0). Далее в списке видно, что наша мышь имеет Spd=1.5. Полтора мегабита в секунду вполне достаточно для мыши.

Что касается других пунктов, которые можно увидеть в системе файлов /proc, то, возможно, вам будет приятно узнать, что имеется команда lsusb помогающая вам отображать эту информацию. В частности, вы можете получить древовидное изображение ваших USB устройств, используя опцию -t. Это отобразит иерархию подключения. Вы можете использовать опцию -d для вывода информации о конкретном устройстве, после того, как получите результат от системы с использованием опции -t. Опция -v генерирует подробный вывод с интерпретацией многих полей, что мы могли выидеть в Листинге 25. Для Листинга 26, мы подсоединили внешний хаб, цифровую камеру Nikon, USB-брелок и внешний жесткий диск USB 2.00, а затем выполнили команду.

Листинг 26. Использование команды lsusb

[root@lyrebird root]# lsusb -t
Bus# 4
`-Dev# 1 Vendor 0x0000 Product 0x0000
|-Dev# 2 Vendor 0x0409 Product 0x0059
| |-Dev# 8 Vendor 0x04b0 Product 0x0108
| |-Dev# 4 Vendor 0x0d7d Product 0x1400
| `-Dev# 7 Vendor 0x1058 Product 0x0401
`-Dev# 3 Vendor 0x07d0 Product 0x1202
Bus# 3
`-Dev# 1 Vendor 0x0000 Product 0x0000
Bus# 2
`-Dev# 1 Vendor 0x0000 Product 0x0000
Bus# 1
`-Dev# 1 Vendor 0x0000 Product 0x0000
`-Dev# 2 Vendor 0x1241 Product 0x1111
[root@lyrebird root]# lsusb -d 0x0409:0x0059
Bus 004 Device 002: ID 0409:0059 NEC Corp. HighSpeed Hub
[root@lyrebird root]# lsusb -d 0x04b0:0x0108
Bus 004 Device 008: ID 04b0:0108 Nikon Corp. Coolpix 2500
[root@lyrebird root]# lsusb -d 0x0d7d:0x1400
Bus 004 Device 004: ID 0d7d:1400 Phison Electronics Corp.
[root@lyrebird root]# lsusb -d 0x1058:0x0401
Bus 004 Device 007: ID 1058:0401 Western Digital Technologies, Inc.
[root@lyrebird root]# lsusb -d 0x07d0:0x1202
Bus 004 Device 003: ID 07d0:1202 Dazzle
[root@lyrebird root]# lsusb -d 0x1241:0x1111
Bus 001 Device 002: ID 1241:1111 Belkin Mouse
[root@lyrebird root]#

В Листинге 27 приведена часть подробного вывода после выполнения команды lsusb. Это часть для USB-брелока. Заметьте, что устройство сообщает свои максимальные требования к питанию (200mA). Отметим также, что устройство может быть обнаружено как SCSI устройство. Используя команду dmesg или fdisk -l вы можете выяснить, какое SCSI устройство соответсвует этому устройству. Большинство камер оборудованы USB портами, а также устройствами чтения карт (картридерами). Флэш-устройства и жесткие диски причисляемые к классу устройств хранения управляются в Linux как SCSI устройства. Многие камеры идут с программами под Windows, помогающими загружать картинки с камеры. В Linux вы можете просто смонтировать SCSI устройство, представляющее камеру и скопировать фотографии на свой жесткий диск, где вы сможете редактировать их в таких программах, как GNU Image Manipulation Program [GNU Программа Манипулирования Изображениями] (the GIMP). Затем вы можете стереть файлы с карты памяти или записать файлы на нее из Linux, используя камеру как вычурную замену флоппи-диску.

Листинг 27. Подробный вывод (его часть) команды

[root@lyrebird root]# lsusb -vd 0x0d7d:0x1400
Bus 004 Device 004: ID 0d7d:1400 Phison Electronics Corp.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x0d7d Phison Electronics Corp.
idProduct 0x1400
bcdDevice 0.02
iManufacturer 1
iProduct 2 USB DISK 12X
iSerial 3 0743112A0083
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 32
bNumInterfaces 1
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
MaxPower 200mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 8 Mass Storage
bInterfaceSubClass 6 SCSI
bInterfaceProtocol 80 Bulk (Zip)
iInterface 0
...

Еще один кусочек информации, который мы можем извлечь о шине и ID наших USB устройств из Листинга 26, это способ определения какие модули требуются для конкретного устройства. Приведем пару примеров в Листинге 28.

Листинг 28. Подробный вывод (его часть) команды lsusb

[root@lyrebird root]# usbmodules --device /proc/bus/usb/004/003
usb-storage
[root@lyrebird root]# usbmodules --device /proc/bus/usb/004/007
usb-storage
hid

Подключение на лету (Горячее подключение)

Есть две команды, при помощи которых ваша система может использоваться для управления подключением USB устройств на лету: usbmgr и hotplug. В зависимости от того, какую из них вы будете использовать файлы настроек можно обнаружить в каталогах /etc/usbmgr или /etc/hotplug соответственно. Новые системы скорее всего уже имеют поддержку подключения на лету.

Подключение на лету USB устройств (а также PC карт) подразумевает, что пользователь подключает устройство в то время, как система уже работает. При этом система должна :

* Определить тип устройства, найти драйвер и запустить его
* Связать драйвер с устройством
* Уведомить другие подсистемы об устройстве. Что позволяет дискам смонтироваться или, например, добавиться очереди для печати.

Взято с ibm developerworks

Похожие посты
  • LPI 101. Аппаратные средства и архитектура. Коммуникационные устройства
  • LPI 101. Аппаратные средства и архитектура. Модемы и звуковые карты
  • LPI 101. Аппаратные средства и архитектура. Настройка SCSI-устройств
  • LPI 101: Устройства, файловые системы Linux и стандарт FHS. Установка владельца и группы файла
  • Резервное копирование (Backup). Методы и средства. Часть 2.
  • Архитектура управления Exchange 2010 – использование одной машины для управления несколькими организациями Exchange 2010, часть 3
  • Архитектура управления Exchange 2010 – использование одной машины для управления несколькими организациями Exchange 2010, часть 2
  • LPI 101: Устройства, файловые системы Linux и стандарт FHS. Жесткие и символические ссылки
  • Резервное копирование (Backup). Методы и средства. Часть 4.
  • Архитектура управления Exchange 2010 – использование одной машины для управления несколькими организациями Exchange 2010, часть 1
  • Комментарии

    Your email is never published nor shared. Required fields are marked *

    *
    *