Управление usb устройствами linux

USB storage devices (Русский)

Состояние перевода: На этой странице представлен перевод статьи USB storage devices. Дата последней синхронизации: 10 февраля 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

В этом документе описываются способы использования различных USB накопителей в Linux. Это также касается и других устройств, таких как цифровые камеры или телефоны, которые распознаются как обычные USB накопители.

Если у вас свежая система со стандартным ядром Arch и современная среда рабочего стола, USB устройство должно автоматически появляться на рабочем столе при подключении, и лезть в консоль не потребуется.

Автоматическое монтирование с помощью udisks

Это самый простой и самый часто используемый метод. Он используется во многих средах рабочего стола, но может применяться и отдельно.

Подробности и вспомогательные программы описаны в статье udisks (Русский).

Монтирование вручную

Примечание: Перед тем, как обвинить Arch Linux в том, что он не монтирует USB устройства, стоит проверить все доступные порты. Часть разъёмов могут не обслуживаться контроллером (или не подключены к контроллеру вообще, в случае портов на передней панели), и устройства физически не смогут монтироваться. Теоретически контроллер портов может оказаться выключенным; для того, чтобы это проверить, нужно зайти в BIOS и отыскать параметр с названием вроде «Onboard USB Controller» — должен быть «Enabled».

Где взять ядро, поддерживающее usb_storage

Если не используется самодельное (самосборное) ядро, то делать ничего не требуется, все официальные ядра Arch Linux настроены как нужно. В случае самосборного ядра следует убедиться, что при компиляции была включена поддержка SCSI, SCSI-Disk и usb_storage. Если установлена последняя версия udev, то можно просто подключить носитель, и система автоматически подгрузит все необходимые модули ядра.

Опознавание устройств

Самое первое, что нужно знать об устройстве, так это его идентификатор, присвоенный ядром. Смотрите fstab (Русский)#Определение файловой системы для подробностей.

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

Монтирование USB флэш-памяти

Для этого нужно создать папку, в которую в дальнейшем будет монтироваться флэшка:

От имени суперпользователя (root)

Монтировать устройство рутом при помощи команды (только нужно заменить device_node найденным устройством, как было показано выше):

# mount device_node /mnt/usbstick
# mount -U UUID /mnt/usbstick

Если mount не распознаёт формат устройства (файловой системы), то можно попробовать с ключом -t , а также глянуть в mount(8) для просвещения. Если монтирование не работает и на устройстве нет важных данных, можно попробовать отформатировать его или даже пересоздать таблицу разделов.

Читайте также:  Linux монтирование сетевой папки smb

Разрешить запись обычным пользователям

Чтобы непривилегированные пользователи могли записывать данные на USB носитель, нужно прописать следующую команду:

# mount -o gid=users,fmask=113,dmask=002 /dev/sda1 /mnt/usbstick

Если это не сработало, убедитесь, что файловая система монтируема и доступна для записи суперпользователю (смотрите предыдущий раздел).

От имени обычного пользователя посредством fstab

Если вы хотите, чтобы обычный пользователь имел право монтировать и размонтировать устройство, смотрите FAT (Русский)#Запись на FAT32 в качестве обычного пользователя.

Инструменты монтирования

Есть множество инструментов, облегчающих монтирование от имени обычного пользователя.

Решение проблем

Никакие устройства хранения USB не распознаются системой

Если вы подключили USB-накопитель к компьютеру, но он не отображается в списке lsblk или dmesg, убедитесь, что в BIOS включена функция XHCI Handoff и EHCI Handoff.

Устройство USB определилось, но его не получается примонтировать

Если вы недавно обновили ядро, модули для USB-накопителя для вашего текущего ядра были удалены и заменены модулями для свежеустановленного ядра. Эти модули не смогут загрузиться, пока вы не перезагрузитесь и не запустите новое ядро или не выполните откат пакета ядра до версии, соответствующей текущей версии ядра.

Устройство не выключается после размонтирования всех разделов

Невыключение питания устройства может привести к тому, что:

  • жёсткий диск не припаркует свою головку, издаст слабый царапающий звук при раскручивании и может деградировать [2], или
  • твердотельный диск (особенно старый) не сбросит буферы кэша или не обновит таблицы отображения, что может привести к потере данных [3].

После размонтирования разделов устройство всё ещё включено. Чтобы безопасно извлечь его, необходимо сначала попросить систему выключить его: [4]

# echo 1 > /sys/block/имя_диска/device/delete

Если вы используете udisks, можно использовать следующие команды: [5]

$ udisksctl unmount -b /dev/sdXY $ udisksctl power-off -b /dev/sdX 

Источник

USB устройства

USB — Universal Serial Bus (Универсальная последовательная шина) была разработана консорциумом компаний с целью предоставить единственную, простую шину для подключения периферии.

Порты Linux USB-устройств

Поддержка USB устройств

Дизайн USB позволяет устройствам подключаться на лету, используя для подключения стандартные гнезда. USB устройства включают в себя: клавиатуры, мыши, принтеры, сканеры, жесткие диски, флэш-драйвы, камеры, модемы, сетевые адаптеры и колонки, а их список постоянно растёт.

Имеющаяся в Linux поддержка USB устройств достаточно всеобъемлюща, но ряд устройств требуют специальных драйверов, а другие, преимущественно принтеры и сканеры, могут не поддерживаться или поддерживаться лишь частично.

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

Читайте также:  Backup mac windows linux

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

Многослойность USB системы позволяет хосту определить характеристики USB устройства, включая класс, имя производителя, имя устройства, требования к напряжению, скорость, уровень поддержки USB и другие функции.

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

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

Команда lspci позволяет отобразить USB устройства:

root@localhost:~:# lspci | grep -i usb 00:03.0 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f) 00:03.1 USB Controller: Silicon Integrated Systems [SiS] USB 1.1 Controller (rev 0f) 00:03.3 USB Controller: Silicon Integrated Systems [SiS] USB 2.0 Controller

Вывод команды показывает, что в системе имеются 3 USB контроллера.

С помощью команды lsmod можно отобразить загруженные USB модули:

root@localhost:~:# lsmod | egrep 'usb|hci|hid|mouse|Module' Module Size Used by hid_microsoft 3232 0 usbhid 32992 0 hid 39040 2 hid_microsoft,usbhid ohci_hcd 24332 0 psmouse 41644 0 ssb 38464 1 ohci_hcd ehci_hcd 34152 0

Отображение подключенных USB устройств

Сводная информация о подключенных в настоящее время USB устройствах содержится в файле /proc/bus/usb/devices.

Вывести её можно следующей командой:

root@localhost:~:# cat /proc/bus/usb/devices T: Bus=03 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 3 B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0001 Rev= 2.06 S: Manufacturer=Linux 2.6.29.6 ohci_hcd S: Product=OHCI Host Controller S: SerialNumber=0000:00:03.1 C:* #Ifs= 1 Cfg#= 1 Atr=e0 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=255ms T: Bus=02 Lev=00 Prnt=00 Port=00 Cnt=00 Dev#= 1 Spd=12 MxCh= 3 B: Alloc= 28/900 us ( 3%), #Int= 2, #Iso= 0 D: Ver= 1.10 Cls=09(hub ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0001 Rev= 2.06 S: Manufacturer=Linux 2.6.29.6 ohci_hcd S: Product=OHCI Host Controller S: SerialNumber=0000:00:03.0 C:* #Ifs= 1 Cfg#= 1 Atr=e0 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=255ms T: Bus=02 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 2 Spd=1.5 MxCh= 0 D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1 P: Vendor=045e ProdID=00db Rev= 1.73 S: Manufacturer=Microsoft S: Product=Natural� Ergonomic Keyboard 4000 C:* #Ifs= 2 Cfg#= 1 Atr=a0 MxPwr=100mA I:* If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=01 Prot=01 Driver=usbhid E: Ad=81(I) Atr=03(Int.) MxPS= 8 Ivl=10ms I:* If#= 1 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbhid E: Ad=82(I) Atr=03(Int.) MxPS= 8 Ivl=10ms T: Bus=01 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=00 MxPS=64 #Cfgs= 1 P: Vendor=1d6b ProdID=0002 Rev= 2.06 S: Manufacturer=Linux 2.6.29.6 ehci_hcd S: Product=EHCI Host Controller S: SerialNumber=0000:00:03.3 C:* #Ifs= 1 Cfg#= 1 Atr=e0 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= 4 Ivl=256ms

В листинге Spd=480 соответствует шине USB 2.0, а Spd=12 — устройствам USB 1.1. Далее в списке видно, что к системе в настоящее время подключено 1 USB устройство — Microsoft Natural Ergonomic Keyboard 400 (Spd=1.5).

Читайте также:  Linux с поддержкой nvidia

На этой клавиатуре я, естественно, и набираю данный текст.

Иерархию подключения USB устройств позволяет увидеть команда lsusb с опцией -t:

root@localhost:~:# lsusb -t Bus# 3 `-Dev# 1 Vendor 0x1d6b Product 0x0001 Bus# 2 `-Dev# 1 Vendor 0x1d6b Product 0x0001 `-Dev# 2 Vendor 0x045e Product 0x00db Bus# 1 `-Dev# 1 Vendor 0x1d6b Product 0x0002

Вывод информации о конкретном USB устройстве можно получить следующей командой:

root@localhost:~:# lsusb -vd 0x045e:0x00db Bus 002 Device 002: ID 045e:00db Microsoft Corp. Natural Ergonomic Keyboard 4000 V1.0 Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 0 (Defined at Interface level) bDeviceSubClass 0 bDeviceProtocol 0 bMaxPacketSize0 8 idVendor 0x045e Microsoft Corp. idProduct 0x00db Natural Ergonomic Keyboard 4000 V1.0 bcdDevice 1.73 iManufacturer 1 Microsoft iProduct 2 Natural� Ergonomic Keyboard 4000 iSerial 0 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 59 bNumInterfaces 2 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xa0 (Bus Powered) Remote Wakeup MaxPower 100mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 1 Boot Interface Subclass bInterfaceProtocol 1 Keyboard iInterface 0 ** UNRECOGNIZED: 09 21 11 01 00 01 22 3c 00 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 1 bInterfaceClass 3 Human Interface Device bInterfaceSubClass 0 No Subclass bInterfaceProtocol 0 None iInterface 0 ** UNRECOGNIZED: 09 21 11 01 00 01 22 56 00 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0008 1x 8 bytes bInterval 10 Device Status: 0x0000 (Bus Powered)

Подключение USB устройства на лету

Новые системы Linux имеют поддержку подключения USB устройств на лету (горячее подключение), что подразумевает подключение устройства к работающей системе, которая должна:

  • определить тип USB устройства, найти драйвер и запустить его;
  • связать драйвер с устройством;
  • уведомить о USB устройстве другие подсистемы.

Источник

Оцените статью
Adblock
detector