Определить, отключить и повторно подключить 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

1 ответ

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

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

Если вы хотите деактивировать свое USB-устройство и затем активировать его, посмотрите его публикацию здесь: https://unix.stackexchange.com/questions/234581/disconnect-and-reconnect-usb-port-via-cli.

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

EDIT: Я

У меня нет банкомата с Linux, поэтому я, к сожалению, не могу воспроизвести, но похоже, bind а также unbind также может работать. Взгляните на этот https://www.kernel.org/doc/Documentation/usb/power-management.txt. Проверьте следующие два текстовых блока: один, начиная с USB Port Power Control другой справа внизу, начиная с User Interface for Port Power Control, Убедитесь, что когда вы unbind чтобы отсоединить модуль / драйвер вашего USB-устройства, а не модуль, связанный с вашим USB-концентратором.

РЕДАКТИРОВАТЬ II:

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

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

[ 1897.772736] USB 2-2: новое высокоскоростное USB-устройство № 7 с использованием ehci-pci
[ 1897.907178] usb 2-2: найдено новое USB-устройство, idVendor = 13fe, idProduct = 5500
[ 1897.907185] usb 2-2: Новые строки USB-устройств: Mfr=1, Product=2, SerialNumber=3
[ 1897.907189] USB 2-2: Продукт: Silicon-Power8G
[ 1897.907193] USB 2-2: Производитель: UFD 3.0
[ 1897.907196] usb 2-2: SerialNumber: P1602059070C691668B63659
[ 1897.907802] usb-storage 2-2:1.0: Обнаружено запоминающее USB-устройство
[ 1897.909153] scsi host22: usb-storage 2-2:1.0
[ 1898.910257] scsi 22:0:0:0: UFD 3.0 с прямым доступом, Silicon-Power8G PMAP, PQ: 0, ANSI: 6
[1898.910896] SD 22: 0: 0: 0: Прикрепленный scsi универсальный тип sg4 0
[1898.911521] sd 22: 0: 0: 0: [sdd] 15126528 512-байтовые логические блоки: (7,74 ГБ / 7,21 ГБ)
[1898.912261] SD 22: 0: 0: 0: [SDD] Защита от записи отключена
[1898.912266] SD 22: 0: 0: 0: [SDD] Режим Sense: 45 00 00 00
[1898.912982] sd 22: 0: 0: 0: [sdd] Кэш записи: отключен, кэш чтения: включен, не поддерживает DPO или FUA
[1898.950371] sdd:
[1898.953487] SD 22: 0: 0: 0: [SDD] Подключенный съемный диск SCSI
[1899.243793] FAT-fs (sdd): Том не был правильно размонтирован. Некоторые данные могут быть повреждены. Пожалуйста, запустите 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 dd ├── 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── 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 / мишень 22: 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 device │ │ │ │ │ │ ├── 22: 0: 0: 0 0 │ │ │ │ │ │ │ │ ├── устройство ->../../../22:04: 0: 0 device │ │ │ │ │ │ │ ─ ─── 22: 0: 0: 0 device │ │ │ │ │ │ │ │ ├── устройство ->../../../22: 0: 0: 0 device │ │ │ │ │ │ │ ─── 22: 0: 0: 0 0 │ │ │ │ │ │ │ │ ├ ├ ─ device - ─ ─ ─ ─ ─ ─ ─ / 22: 0: 0: 0 device device │ │ │ │ │ │ ─── 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

Помните, мы все еще ищем 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
├── водитель ->../../../../../../bus/usb/drivers/usb-storage
│ │ │ ├── водитель ->../../../../../../../../../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 new_id remove_id удаление события

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

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
[ 3516.792406] scsi host23: usb-storage 2-2: 1.0
[ 3517.792201] SCSI 23: 0: 0: 0: UFD 3.0 с прямым доступом. Silicon-Power8G  PMAP PQ: 0 ANSI: 6
[ 3517.792879] SD 23: 0: 0: 0: Прикрепленный scsi универсальный тип sg4 0
[ 3517.793592] SD 23:0:0:0: [SDD] 15126528 512-байтовые логические блоки: (7,74 ГБ / 7,21 ГБ)
[ 3517.794340] SD 23:0:0:0: [SDD] Защита от записи отключена
[ 3517.794346] SD 23:0:0:0: [SDD] Режим Sense: 45 00 00 00
[ 3517.796083] SD 23:0:0:0: [SDD] Кэш записи: отключен, кэш чтения: включен, не поддерживает DPO или FUA
[ 3517.801135]  sdd:
[ 3517.803788] SD 23:0:0:0: [SDD] Подключенный съемный диск SCSI
[ 3518.096593] FAT-fs (sdd): Том не был правильно отключен. Некоторые данные могут быть повреждены. Пожалуйста, запустите fsck.

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

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

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