Идентифицировать, отключать и повторно подключать USB-устройство через терминал

Я использую устройство USB Huawei ME906s-158, как описано здесь. Если модуль теряет соединение, у него, похоже, возникают проблемы с повторным подключением к сети. Поэтому моя идея - написать какой-нибудь скрипт, работающий в фоновом режиме, проверяя, подключено ли соединение LTE, и если не освободить USB-устройство и повторно подключить его, используя команды терминала. Я нашел полезную информацию здесь и там, но код не работает на моем Ubuntu 16.04, что может быть проблемой.

Взятие этой строки, например:

modprobe -r -f uhci_hcd

приводит к Ошибка modprobe: FATAL: Module uhci_hcd is builtin.. То же самое верно, если я использую xhci_hcd, который используется для моего устройства. Поэтому мой вопрос заключается в том, как изменить команды modprobe для удаления / подключения моего устройства?

Используя dmesg, устройство подключено как

usb 3-13.1: new high-speed USB device number 117 using xhci_hcd usb 3-13.1: New USB device found, idVendor=12d1, idProduct=15c1 usb 3-13.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 3-13.1: Product: HUAWEI Mobile usb 3-13.1: Manufacturer: Huawei Technologies Co., Ltd. usb 3-13.1: SerialNumber: 0123456789ABCDEF cdc_ether 3-13.1:2.0 usb0: register 'cdc_ether' at usb-0000:00:14.0-13.1, CDC Ethernet Device, 02:1e:10:1f:00:00

, где номер устройства меняется, и Порт usb зависит от используемого аппаратного порта. Я думаю, что просто не понимаю, как устройство названо или смонтировано для решения с помощью modprobe. Соответствующая информация из lsusb - Bus 003 Device 028: ID 12d1:15c1 Huawei Technologies Co., Ltd. и lsusb -t поставляет

/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/15p, 480M |__ Port 12: Dev 11, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 3: Dev 14, If 1, Class=Human Interface Device, Driver=, 1.5M |__ Port 3: Dev 14, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 1: Dev 64, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 2: Dev 13, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 2: Dev 13, If 1, Class=Human Interface Device, Driver=usbhid, 1.5M |__ Port 13: Dev 3, If 0, Class=Hub, Driver=hub/4p, 480M |__ Port 14: Dev 29, If 0, Class=Communications, Driver=cdc_ether, 480M |__ Port 14: Dev 29, If 1, Class=CDC Data, Driver=cdc_ether, 480M |__ Port 14: Dev 29, If 2, Class=Vendor Specific Class, Driver=option, 480M |__ Port 14: Dev 29, If 3, Class=Vendor Specific Class, Driver=option, 480M |__ Port 14: Dev 29, If 4, Class=Vendor Specific Class, Driver=option, 480M |__ Port 14: Dev 29, If 5, Class=Vendor Specific Class, Driver=option, 480M |__ Port 14: Dev 29, If 6, Class=Vendor Specific Class, Driver=option, 480M

Большое спасибо за вашу помощь.

Редактировать 1: Вот полный dmesg:

[748010.825136] usb 3-13.1: new high-speed USB device number 79 using xhci_hcd [748010.926143] usb 3-13.1: New USB device found, idVendor=12d1, idProduct=15c1 [748010.926146] usb 3-13.1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [748010.926147] usb 3-13.1: Product: HUAWEI Mobile [748010.926148] usb 3-13.1: Manufacturer: Huawei Technologies Co., Ltd. [748010.926149] usb 3-13.1: SerialNumber: 0123456789ABCDEF [748010.929581] cdc_ether 3-13.1:2.0 usb0: register 'cdc_ether' at usb-0000:00:14.0-13.1, CDC Ethernet Device, 02:1e:10:1f:00:00 [748010.930008] option 3-13.1:2.2: GSM modem (1-port) converter detected [748010.930178] usb 3-13.1: GSM modem (1-port) converter now attached to ttyUSB0 [748010.930451] option 3-13.1:2.3: GSM modem (1-port) converter detected [748010.930588] usb 3-13.1: GSM modem (1-port) converter now attached to ttyUSB1 [748010.930829] option 3-13.1:2.4: GSM modem (1-port) converter detected [748010.930929] usb 3-13.1: GSM modem (1-port) converter now attached to ttyUSB2 [748010.931153] option 3-13.1:2.5: GSM modem (1-port) converter detected [748010.931254] usb 3-13.1: GSM modem (1-port) converter now attached to ttyUSB3 [748010.931474] option 3-13.1:2.6: GSM modem (1-port) converter detected [748010.931580] usb 3-13.1: GSM modem (1-port) converter now attached to ttyUSB4 [748010.959172] cdc_ether 3-13.1:2.0 enp0s20u13u1c2: renamed from usb0 [748010.986087] IPv6: ADDRCONF(NETDEV_UP): enp0s20u13u1c2: link is not ready [748010.986238] cdc_ether 3-13.1:2.0 enp0s20u13u1c2: kevent 12 may have been dropped [748010.990538] IPv6: ADDRCONF(NETDEV_UP): enp0s20u13u1c2: link is not ready

Полный комплект tree /sys/devices/pci0000:00/0000:00:14.0/usb3/3-13/ | grep driver:

│   │   ├── driver -> ../../../../../../../bus/usb/drivers/cdc_ether │   │   ├── driver -> ../../../../../../../bus/usb/drivers/cdc_ether │   │   ├── driver -> ../../../../../../../bus/usb/drivers/option │   │   │   ├── driver -> ../../../../../../../../bus/usb-serial/drivers/option1 │   │   ├── driver -> ../../../../../../../bus/usb/drivers/option │   │   │   ├── driver -> ../../../../../../../../bus/usb-serial/drivers/option1 │   │   ├── driver -> ../../../../../../../bus/usb/drivers/option │   │   │   ├── driver -> ../../../../../../../../bus/usb-serial/drivers/option1 │   │   ├── driver -> ../../../../../../../bus/usb/drivers/option │   │   │   ├── driver -> ../../../../../../../../bus/usb-serial/drivers/option1 │   │   ├── driver -> ../../../../../../../bus/usb/drivers/option │   │   │   ├── driver -> ../../../../../../../../bus/usb-serial/drivers/option1 │   ├── driver -> ../../../../../../bus/usb/drivers/usb │   ├── driver -> ../../../../../../bus/usb/drivers/hub ├── driver -> ../../../../../bus/usb/drivers/usb
0
задан 12 January 2018 в 12:37

3 ответа

Я хотел бы прокомментировать, но у меня все еще недостаточно очков репутации для этого.

Насколько я знаю, modprobe используется для добавления / удаления модулей / драйверов. С помощью команды modprobe -r -f uhci_hcd вы пытаетесь удалить модуль, встроенный в ядро ​​https://unix.stackexchange.com/questions/61917/removing-builtin-modules-in-linux#61918.

Если вы хотите деактивировать устройство USB и активировать его, посмотрите на его публикацию здесь: https://unix.stackexchange.com/questions/61917/removing-builtin-modules в-Linux # 61918 .

Здесь намного проще: https://superuser.com/questions/371068/is-there-a-way-to-power-down-a-usb-device-using-software. [ ! d5]

EDIT: I

У меня нет Linux-машины atm, поэтому я, к сожалению, неспособен воспроизвести, но похоже, что bind и unbind также могут работать. Взгляните на это https://superuser.com/questions/371068/is-there-a-way-to-power-down-a-usb-device-using-software . Проверьте следующие два текстовых блока: один из которых смотрит на USB Port Power Control, другой справа, начиная с User Interface for Port Power Control. Убедитесь, что когда вы unbind отсоединяете модуль / драйвер устройства USB, а не модуль, связанный с вашим узлом USB.

EDIT II:

Хорошо, теперь Я вернулся домой и смог проверить его на своей машине. Я запускаю Lubuntu 16.04. Мое USB-устройство для тестирования было USB-накопителем на 8 ГБ.

Прежде всего, откройте терминал и введите dmesg -w. Затем подключите USB-устройство.

[ 1897.772736] usb 2-2: new high-speed USB device number 7 using ehci-pci [ 1897.907178] usb 2-2: New USB device found, idVendor=13fe, idProduct=5500 [ 1897.907185] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 1897.907189] usb 2-2: Product: Silicon-Power8G [ 1897.907193] usb 2-2: Manufacturer: UFD 3.0 [ 1897.907196] usb 2-2: SerialNumber: P1602059070C691668B63659 [ 1897.907802] usb-storage 2-2:1.0: USB Mass Storage device detected [ 1897.909153] scsi host22: usb-storage 2-2:1.0 [ 1898.910257] scsi 22:0:0:0: Direct-Access UFD 3.0 Silicon-Power8G PMAP PQ: 0 ANSI: 6 [ 1898.910896] sd 22:0:0:0: Attached scsi generic sg4 type 0 [ 1898.911521] sd 22:0:0:0: [sdd] 15126528 512-byte logical blocks: (7.74 GB/7.21 GiB) [ 1898.912261] sd 22:0:0:0: [sdd] Write Protect is off [ 1898.912266] sd 22:0:0:0: [sdd] Mode Sense: 45 00 00 00 [ 1898.912982] sd 22:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 1898.950371] sdd: [ 1898.953487] sd 22:0:0:0: [sdd] Attached SCSI removable disk [ 1899.243793] FAT-fs (sdd): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

Здесь мы видим, что было обнаружено новое устройство ehci-pci в usb 2-2. После нескольких строк usb 2-2 изменяется на usb-storage 2-2:1.0 на scsi 22:0:0:0 и, наконец, на sd 22:0:0:0. То, что эти цифры точно означают, не в моих силах. Это как-то связано с USB-портом, но это еще не все. По крайней мере, это идентификатор.

В любом случае, теперь мы идем в папку /sys/. Где-то внутри /sys/ мы найдем драйвер, который отвечает за наше USB-устройство. Мы хотим unbind наше устройство от этого драйвера. Поэтому нам нужно выяснить путь к драйверу и его команду unbind. Мы собираемся использовать команду tree. Напечатаем tree /sys/ | grep 22:0:0:0

alex@ga-P55A-UD5:~$ tree /sys/ | grep 22:0:0:0 │   ├── sdd -> ../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd │   │   │   ├── 22:0:0:0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0 │   │   │   │   ├── 22:0:0:0 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0 │   │   ├── sdd -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd │   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/bsg/22:0:0:0 │   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_device/22:0:0:0 │   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_disk/22:0:0:0 │   │   └── sg4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_generic/sg4 │   │   ├── 8:48 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd │   ├── 21:4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_generic/sg4 │   ├── 249:4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/bsg/22:0:0:0 │   │   │   │   │   │   │   │   ├── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   └── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   └── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   └── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0

. В первой строке уже говорится нам, куда идти: ../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd

Remeber, мы все еще ищем команду unbind где-то в папке драйвера, которая каким-то образом привязана к нашему устройству. Наше устройство, относящееся к dmesg, также было названо 2-2:1.0, поэтому мы используем его как родительскую папку для tree:

tree /sys/devices/pci0000\:00/0000\:00\:1d.7/usb2/2-2/2-2\:1.0/ | grep driver

alex@ga-P55A-UD5:~$ tree /sys/devices/pci0000\:00/0000\:00\:1d.7/usb2/2-2/2-2\:1.0/ | grep driver ├── driver -> ../../../../../../bus/usb/drivers/usb-storage │   │   │   ├── driver -> ../../../../../../../../../bus/scsi/drivers/sd

Теперь у нас есть нашел путь к драйверу, который подключен к USB-устройству.

Итак, давайте ls /sys/bus/usb/drivers/usb-storage/

alex@ga-P55A-UD5:~$ ls /sys/bus/usb/drivers/usb-storage/ 2-2:1.0 bind module new_id remove_id uevent unbind

Теперь у нас есть вся необходимая информация, поэтому мы вводим следующее как root (с sudo оно не работает) :

echo -n "2-2:1.0" > /sys/bus/usb/drivers/usb-storage/unbind

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

echo -n "2-2:1.0" > /sys/bus/usb/drivers/usb-storage/bind

Вывод dmesg -w:

[ 3516.792135] usb-storage 2-2:1.0: USB Mass Storage device detected [ 3516.792406] scsi host23: usb-storage 2-2:1.0 [ 3517.792201] scsi 23:0:0:0: Direct-Access UFD 3.0 Silicon-Power8G PMAP PQ: 0 ANSI: 6 [ 3517.792879] sd 23:0:0:0: Attached scsi generic sg4 type 0 [ 3517.793592] sd 23:0:0:0: [sdd] 15126528 512-byte logical blocks: (7.74 GB/7.21 GiB) [ 3517.794340] sd 23:0:0:0: [sdd] Write Protect is off [ 3517.794346] sd 23:0:0:0: [sdd] Mode Sense: 45 00 00 00 [ 3517.796083] sd 23:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 3517.801135] sdd: [ 3517.803788] sd 23:0:0:0: [sdd] Attached SCSI removable disk [ 3518.096593] FAT-fs (sdd): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

Надеюсь, это поможет вам найти решение.

Если вы хотите узнать больше о теме: https://lwn.net/Articles/143397/

1
ответ дан 17 July 2018 в 23:26

Я хотел бы прокомментировать, но у меня все еще недостаточно очков репутации для этого.

Насколько я знаю, modprobe используется для добавления / удаления модулей / драйверов. С помощью команды modprobe -r -f uhci_hcd вы пытаетесь удалить модуль, встроенный в ядро ​​https://unix.stackexchange.com/questions/61917/removing-builtin-modules-in-linux#61918.

Если вы хотите деактивировать устройство USB и активировать его, посмотрите на его публикацию здесь: https://unix.stackexchange.com/questions/61917/removing-builtin-modules в-Linux # 61918 .

Здесь намного проще: https://superuser.com/questions/371068/is-there-a-way-to-power-down-a-usb-device-using-software. [ ! d5]

EDIT: I

У меня нет Linux-машины atm, поэтому я, к сожалению, неспособен воспроизвести, но похоже, что bind и unbind также могут работать. Взгляните на это https://superuser.com/questions/371068/is-there-a-way-to-power-down-a-usb-device-using-software . Проверьте следующие два текстовых блока: один из которых смотрит на USB Port Power Control, другой справа, начиная с User Interface for Port Power Control. Убедитесь, что когда вы unbind отсоединяете модуль / драйвер устройства USB, а не модуль, связанный с вашим узлом USB.

EDIT II:

Хорошо, теперь Я вернулся домой и смог проверить его на своей машине. Я запускаю Lubuntu 16.04. Мое USB-устройство для тестирования было USB-накопителем на 8 ГБ.

Прежде всего, откройте терминал и введите dmesg -w. Затем подключите USB-устройство.

[ 1897.772736] usb 2-2: new high-speed USB device number 7 using ehci-pci [ 1897.907178] usb 2-2: New USB device found, idVendor=13fe, idProduct=5500 [ 1897.907185] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 1897.907189] usb 2-2: Product: Silicon-Power8G [ 1897.907193] usb 2-2: Manufacturer: UFD 3.0 [ 1897.907196] usb 2-2: SerialNumber: P1602059070C691668B63659 [ 1897.907802] usb-storage 2-2:1.0: USB Mass Storage device detected [ 1897.909153] scsi host22: usb-storage 2-2:1.0 [ 1898.910257] scsi 22:0:0:0: Direct-Access UFD 3.0 Silicon-Power8G PMAP PQ: 0 ANSI: 6 [ 1898.910896] sd 22:0:0:0: Attached scsi generic sg4 type 0 [ 1898.911521] sd 22:0:0:0: [sdd] 15126528 512-byte logical blocks: (7.74 GB/7.21 GiB) [ 1898.912261] sd 22:0:0:0: [sdd] Write Protect is off [ 1898.912266] sd 22:0:0:0: [sdd] Mode Sense: 45 00 00 00 [ 1898.912982] sd 22:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 1898.950371] sdd: [ 1898.953487] sd 22:0:0:0: [sdd] Attached SCSI removable disk [ 1899.243793] FAT-fs (sdd): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

Здесь мы видим, что было обнаружено новое устройство ehci-pci в usb 2-2. После нескольких строк usb 2-2 изменяется на usb-storage 2-2:1.0 на scsi 22:0:0:0 и, наконец, на sd 22:0:0:0. То, что эти цифры точно означают, не в моих силах. Это как-то связано с USB-портом, но это еще не все. По крайней мере, это идентификатор.

В любом случае, теперь мы идем в папку /sys/. Где-то внутри /sys/ мы найдем драйвер, который отвечает за наше USB-устройство. Мы хотим unbind наше устройство от этого драйвера. Поэтому нам нужно выяснить путь к драйверу и его команду unbind. Мы собираемся использовать команду tree. Напечатаем tree /sys/ | grep 22:0:0:0

alex@ga-P55A-UD5:~$ tree /sys/ | grep 22:0:0:0 │   ├── sdd -> ../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd │   │   │   ├── 22:0:0:0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0 │   │   │   │   ├── 22:0:0:0 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0 │   │   ├── sdd -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd │   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/bsg/22:0:0:0 │   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_device/22:0:0:0 │   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_disk/22:0:0:0 │   │   └── sg4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_generic/sg4 │   │   ├── 8:48 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd │   ├── 21:4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_generic/sg4 │   ├── 249:4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/bsg/22:0:0:0 │   │   │   │   │   │   │   │   ├── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   └── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   └── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   └── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0

. В первой строке уже говорится нам, куда идти: ../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd

Remeber, мы все еще ищем команду unbind где-то в папке драйвера, которая каким-то образом привязана к нашему устройству. Наше устройство, относящееся к dmesg, также было названо 2-2:1.0, поэтому мы используем его как родительскую папку для tree:

tree /sys/devices/pci0000\:00/0000\:00\:1d.7/usb2/2-2/2-2\:1.0/ | grep driver

alex@ga-P55A-UD5:~$ tree /sys/devices/pci0000\:00/0000\:00\:1d.7/usb2/2-2/2-2\:1.0/ | grep driver ├── driver -> ../../../../../../bus/usb/drivers/usb-storage │   │   │   ├── driver -> ../../../../../../../../../bus/scsi/drivers/sd

Теперь у нас есть нашел путь к драйверу, который подключен к USB-устройству.

Итак, давайте ls /sys/bus/usb/drivers/usb-storage/

alex@ga-P55A-UD5:~$ ls /sys/bus/usb/drivers/usb-storage/ 2-2:1.0 bind module new_id remove_id uevent unbind

Теперь у нас есть вся необходимая информация, поэтому мы вводим следующее как root (с sudo оно не работает) :

echo -n "2-2:1.0" > /sys/bus/usb/drivers/usb-storage/unbind

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

echo -n "2-2:1.0" > /sys/bus/usb/drivers/usb-storage/bind

Вывод dmesg -w:

[ 3516.792135] usb-storage 2-2:1.0: USB Mass Storage device detected [ 3516.792406] scsi host23: usb-storage 2-2:1.0 [ 3517.792201] scsi 23:0:0:0: Direct-Access UFD 3.0 Silicon-Power8G PMAP PQ: 0 ANSI: 6 [ 3517.792879] sd 23:0:0:0: Attached scsi generic sg4 type 0 [ 3517.793592] sd 23:0:0:0: [sdd] 15126528 512-byte logical blocks: (7.74 GB/7.21 GiB) [ 3517.794340] sd 23:0:0:0: [sdd] Write Protect is off [ 3517.794346] sd 23:0:0:0: [sdd] Mode Sense: 45 00 00 00 [ 3517.796083] sd 23:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 3517.801135] sdd: [ 3517.803788] sd 23:0:0:0: [sdd] Attached SCSI removable disk [ 3518.096593] FAT-fs (sdd): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

Надеюсь, это поможет вам найти решение.

Если вы хотите узнать больше о теме: https://lwn.net/Articles/143397/

1
ответ дан 24 July 2018 в 13:57
  • 1
    Привет, спасибо за ваш исчерпывающий ответ. К сожалению, у меня есть несколько вопросов. Сначала рассматривается вызов как root: я попытался с помощью sudo -i, а затем набрал команды, подумал, что должен выполнять эту работу, не так ли? – Martin Herrmann 11 January 2018 в 11:42
  • 2
    Второй: вызов команды unbind в конце приводит к write error: No such device. Моя проблема в том, что я не могу найти правильное имя устройства. Я пробовал usb 3-13.1, 3-13.1, usb-0000:00:14.0-13.1, cdc_ether 3-13.1:2.0 и другие. Ничего не работает. В-третьих, поиск используемого драйвера приводит к тому, что дерево показывает несколько ссылок на драйвер в bus/usb/drivers/cdc_ether и несколько на bus/usb-serial/drivers/option1. – Martin Herrmann 11 January 2018 в 11:50
  • 3
    Также благодарим вас за ссылку на программу c ++. Я тоже нашел это, но имею ту же проблему, я не знаю имя или назначение устройства USB, я не могу найти назначенное имя или не понимаю, как Ubuntu называет эти устройства – Martin Herrmann 11 January 2018 в 11:55
  • 4
    Благодарю вас, и добро пожаловать. К сожалению, я тоже не гуру Linux. Я полагаю, что cdc_ether будет драйвером вашего устройства USB с идентификатором 3-13.1:2.0. Поэтому попробуйте следующее: tree /sys/ | grep 3-13.1:2.0 или tree /sys/ | grep cdc_ether. И да, я sudo -i. И когда вы нашли позицию команды unbind в каталоге cdc_ether, введите somethinkg как echo -n "3-13.1:2.0" > /sys/bus/drivers/cdc_ether/unbind – AlexOnLinux 11 January 2018 в 12:26
  • 5
    Каков результат работы ls /sys/bus/drivers/cdc_ether/? Выход должен содержать bind, unbind и идентификатор, который вы должны вставить в скобки echo -n "identifier" > /sys/bus/drivers/cdc_ether/unbind – AlexOnLinux 11 January 2018 в 12:41

Я хотел бы прокомментировать, но у меня все еще недостаточно очков репутации для этого.

Насколько я знаю, modprobe используется для добавления / удаления модулей / драйверов. С помощью команды modprobe -r -f uhci_hcd вы пытаетесь удалить модуль, встроенный в ядро ​​https://unix.stackexchange.com/questions/61917/removing-builtin-modules-in-linux#61918.

Если вы хотите деактивировать устройство USB и активировать его, посмотрите на его публикацию здесь: https://unix.stackexchange.com/questions/61917/removing-builtin-modules в-Linux # 61918 .

Здесь намного проще: https://superuser.com/questions/371068/is-there-a-way-to-power-down-a-usb-device-using-software. [ ! d5]

EDIT: I

У меня нет Linux-машины atm, поэтому я, к сожалению, неспособен воспроизвести, но похоже, что bind и unbind также могут работать. Взгляните на это https://superuser.com/questions/371068/is-there-a-way-to-power-down-a-usb-device-using-software . Проверьте следующие два текстовых блока: один из которых смотрит на USB Port Power Control, другой справа, начиная с User Interface for Port Power Control. Убедитесь, что когда вы unbind отсоединяете модуль / драйвер устройства USB, а не модуль, связанный с вашим узлом USB.

EDIT II:

Хорошо, теперь Я вернулся домой и смог проверить его на своей машине. Я запускаю Lubuntu 16.04. Мое USB-устройство для тестирования было USB-накопителем на 8 ГБ.

Прежде всего, откройте терминал и введите dmesg -w. Затем подключите USB-устройство.

[ 1897.772736] usb 2-2: new high-speed USB device number 7 using ehci-pci [ 1897.907178] usb 2-2: New USB device found, idVendor=13fe, idProduct=5500 [ 1897.907185] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 [ 1897.907189] usb 2-2: Product: Silicon-Power8G [ 1897.907193] usb 2-2: Manufacturer: UFD 3.0 [ 1897.907196] usb 2-2: SerialNumber: P1602059070C691668B63659 [ 1897.907802] usb-storage 2-2:1.0: USB Mass Storage device detected [ 1897.909153] scsi host22: usb-storage 2-2:1.0 [ 1898.910257] scsi 22:0:0:0: Direct-Access UFD 3.0 Silicon-Power8G PMAP PQ: 0 ANSI: 6 [ 1898.910896] sd 22:0:0:0: Attached scsi generic sg4 type 0 [ 1898.911521] sd 22:0:0:0: [sdd] 15126528 512-byte logical blocks: (7.74 GB/7.21 GiB) [ 1898.912261] sd 22:0:0:0: [sdd] Write Protect is off [ 1898.912266] sd 22:0:0:0: [sdd] Mode Sense: 45 00 00 00 [ 1898.912982] sd 22:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 1898.950371] sdd: [ 1898.953487] sd 22:0:0:0: [sdd] Attached SCSI removable disk [ 1899.243793] FAT-fs (sdd): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

Здесь мы видим, что было обнаружено новое устройство ehci-pci в usb 2-2. После нескольких строк usb 2-2 изменяется на usb-storage 2-2:1.0 на scsi 22:0:0:0 и, наконец, на sd 22:0:0:0. То, что эти цифры точно означают, не в моих силах. Это как-то связано с USB-портом, но это еще не все. По крайней мере, это идентификатор.

В любом случае, теперь мы идем в папку /sys/. Где-то внутри /sys/ мы найдем драйвер, который отвечает за наше USB-устройство. Мы хотим unbind наше устройство от этого драйвера. Поэтому нам нужно выяснить путь к драйверу и его команду unbind. Мы собираемся использовать команду tree. Напечатаем tree /sys/ | grep 22:0:0:0

alex@ga-P55A-UD5:~$ tree /sys/ | grep 22:0:0:0 │   ├── sdd -> ../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd │   │   │   ├── 22:0:0:0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0 │   │   │   │   ├── 22:0:0:0 -> ../../../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0 │   │   ├── sdd -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd │   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/bsg/22:0:0:0 │   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_device/22:0:0:0 │   │   ├── 22:0:0:0 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_disk/22:0:0:0 │   │   └── sg4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_generic/sg4 │   │   ├── 8:48 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd │   ├── 21:4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/scsi_generic/sg4 │   ├── 249:4 -> ../../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/bsg/22:0:0:0 │   │   │   │   │   │   │   │   ├── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   └── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   └── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   └── 22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0 │   │   │   │   │   │   │   │   │   │   ├── device -> ../../../22:0:0:0

. В первой строке уже говорится нам, куда идти: ../devices/pci0000:00/0000:00:1d.7/usb2/2-2/2-2:1.0/host22/target22:0:0/22:0:0:0/block/sdd

Remeber, мы все еще ищем команду unbind где-то в папке драйвера, которая каким-то образом привязана к нашему устройству. Наше устройство, относящееся к dmesg, также было названо 2-2:1.0, поэтому мы используем его как родительскую папку для tree:

tree /sys/devices/pci0000\:00/0000\:00\:1d.7/usb2/2-2/2-2\:1.0/ | grep driver

alex@ga-P55A-UD5:~$ tree /sys/devices/pci0000\:00/0000\:00\:1d.7/usb2/2-2/2-2\:1.0/ | grep driver ├── driver -> ../../../../../../bus/usb/drivers/usb-storage │   │   │   ├── driver -> ../../../../../../../../../bus/scsi/drivers/sd

Теперь у нас есть нашел путь к драйверу, который подключен к USB-устройству.

Итак, давайте ls /sys/bus/usb/drivers/usb-storage/

alex@ga-P55A-UD5:~$ ls /sys/bus/usb/drivers/usb-storage/ 2-2:1.0 bind module new_id remove_id uevent unbind

Теперь у нас есть вся необходимая информация, поэтому мы вводим следующее как root (с sudo оно не работает) :

echo -n "2-2:1.0" > /sys/bus/usb/drivers/usb-storage/unbind

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

echo -n "2-2:1.0" > /sys/bus/usb/drivers/usb-storage/bind

Вывод dmesg -w:

[ 3516.792135] usb-storage 2-2:1.0: USB Mass Storage device detected [ 3516.792406] scsi host23: usb-storage 2-2:1.0 [ 3517.792201] scsi 23:0:0:0: Direct-Access UFD 3.0 Silicon-Power8G PMAP PQ: 0 ANSI: 6 [ 3517.792879] sd 23:0:0:0: Attached scsi generic sg4 type 0 [ 3517.793592] sd 23:0:0:0: [sdd] 15126528 512-byte logical blocks: (7.74 GB/7.21 GiB) [ 3517.794340] sd 23:0:0:0: [sdd] Write Protect is off [ 3517.794346] sd 23:0:0:0: [sdd] Mode Sense: 45 00 00 00 [ 3517.796083] sd 23:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA [ 3517.801135] sdd: [ 3517.803788] sd 23:0:0:0: [sdd] Attached SCSI removable disk [ 3518.096593] FAT-fs (sdd): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.

Надеюсь, это поможет вам найти решение.

Если вы хотите узнать больше о теме: https://lwn.net/Articles/143397/

1
ответ дан 24 July 2018 в 17:02
  • 1
    Привет, спасибо за ваш исчерпывающий ответ. К сожалению, у меня есть несколько вопросов. Сначала рассматривается вызов как root: я попытался с помощью sudo -i, а затем набрал команды, подумал, что должен выполнять эту работу, не так ли? – Martin Herrmann 11 January 2018 в 11:42
  • 2
    Второй: вызов команды unbind в конце приводит к write error: No such device. Моя проблема в том, что я не могу найти правильное имя устройства. Я пробовал usb 3-13.1, 3-13.1, usb-0000:00:14.0-13.1, cdc_ether 3-13.1:2.0 и другие. Ничего не работает. В-третьих, поиск используемого драйвера приводит к тому, что дерево показывает несколько ссылок на драйвер в bus/usb/drivers/cdc_ether и несколько на bus/usb-serial/drivers/option1. – Martin Herrmann 11 January 2018 в 11:50
  • 3
    Также благодарим вас за ссылку на программу c ++. Я тоже нашел это, но имею ту же проблему, я не знаю имя или назначение устройства USB, я не могу найти назначенное имя или не понимаю, как Ubuntu называет эти устройства – Martin Herrmann 11 January 2018 в 11:55
  • 4
    Благодарю вас, и добро пожаловать. К сожалению, я тоже не гуру Linux. Я полагаю, что cdc_ether будет драйвером вашего устройства USB с идентификатором 3-13.1:2.0. Поэтому попробуйте следующее: tree /sys/ | grep 3-13.1:2.0 или tree /sys/ | grep cdc_ether. И да, я sudo -i. И когда вы нашли позицию команды unbind в каталоге cdc_ether, введите somethinkg как echo -n "3-13.1:2.0" > /sys/bus/drivers/cdc_ether/unbind – AlexOnLinux 11 January 2018 в 12:26
  • 5
    Каков результат работы ls /sys/bus/drivers/cdc_ether/? Выход должен содержать bind, unbind и идентификатор, который вы должны вставить в скобки echo -n "identifier" > /sys/bus/drivers/cdc_ether/unbind – AlexOnLinux 11 January 2018 в 12:41

Другие вопросы по тегам:

Похожие вопросы: