Как выключить/включить USB порт программно?

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

Arthes
Сообщения: 282
ОС: OS X Yosemite and CentOS

Как выключить/включить USB порт программно?

Сообщение Arthes »

Есть USB 3G модем Huawai работающий на Linux SUSE 11.0/Fedora 14, но он иногда виснет при работе. То есть перестает определяться системой. Помогает только вручную передергивание модема. Почитав в интернетах, можно понять что проблема классическая. Существуют разные попытки програмно отключить USB порт, а затем поднять его через некоторое время.

Нашел вот такое вот решение:

Код: Выделить всё

   echo suspend > /sys/bus/usb/devices/«номер устройства»/power/level
    sleep 10
    echo on > /sys/bus/usb/devices/«номер устройства»/power/level


Но вот беда, в Fedora 14 ни в одной из папок устройств USB/power/ нету файла level. Как быть?

И вопрос 2: на SUSE таки есть этот файл level, но меня мучает вопрос относительно того какое же USB устройство, то самое ( чтобы случайно не отключить чего нужного ибо рабочий сервер)
lsusb выдает следующие:

Код: Выделить всё

Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 13fe:3623 Kingston Technology Company Inc.
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

То есть явно не сообщает какой папке устройства в /sys/bus/usb/devices/ соответствует например моя флэшка Bus 001 Device 002: ID 13fe:3623 Kingston Technology Company Inc.

Может кто занимался этим вопросом и подскажет? :rolleyes:

Спасибо сказали:
allez
Сообщения: 2223
Статус: Не очень злой админ :-)
ОС: SuSE, CentOS, FreeBSD, Windows

Re: Как выключить/включить USB порт программно?

Сообщение allez »

Arthes писал(а):
28.07.2011 14:23
То есть явно не сообщает какой папке устройства в /sys/bus/usb/devices/ соответствует например моя флэшка Bus 001 Device 002: ID 13fe:3623 Kingston Technology Company Inc.

То есть как раз наоборот: самым что ни на есть явным образом указывается на то, что нужно смотреть в каталог /sys/bus/usb/devices/1-2.

P. S. Вот только у меня попытка опробовать найденное вами решение оказалась не слишком удачной:

...

$ lsusb | grep "drive" Bus 001 Device 007: ID 0930:6545 Toshiba Corp. Kingston DataTraveler 102 flash drive $ sudo echo suspend > /sys/bus/usb/devices/1-7/power/level bash: /sys/bus/usb/devices/1-7/power/level: Отказано в доступе

Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Как выключить/включить USB порт программно?

Сообщение sash-kan »

Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: Как выключить/включить USB порт программно?

Сообщение sash-kan »

Arthes писал(а):
28.07.2011 14:23
Может кто занимался этим вопросом и подскажет?
честно говоря, так руки и не дошли до разборок по поводу правил нумерации устройств в /sys
я делаю проще — смотрю вывод
$ tail /sys/bus/usb/devices/*/id*
и сопоставляю с известным набором vendor:product (который можно увидеть, например, с помощью той же lsusb)·

upd. а, вспомнил, можно systool-ом получить соответствие·
примерно так:
$ systool -b usb -D -A product
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Arthes
Сообщения: 282
ОС: OS X Yosemite and CentOS

Re: Как выключить/включить USB порт программно?

Сообщение Arthes »

Спасибо за подсказки...

Я вычислил нужный девайс методом сравнения до и после втыкания флэшки

До флэшки

Код: Выделить всё

lrwxrwxrwx. 1 root root 0 2011-07-01 10:10 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:02.1/usb1/1-0:1.0
lrwxrwxrwx. 1 root root 0 2011-07-01 10:10 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:02.0/usb2/2-0:1.0
lrwxrwxrwx. 1 root root 0 2011-07-01 10:10 usb1 -> ../../../devices/pci0000:00/0000:00:02.1/usb1
lrwxrwxrwx. 1 root root 0 2011-07-01 10:10 usb2 -> ../../../devices/pci0000:00/0000:00:02.0/usb2


После ее включения

Код: Выделить всё

lrwxrwxrwx. 1 root root 0 2011-07-01 10:10 1-0:1.0 -> ../../../devices/pci0000:00/0000:00:02.1/usb1/1-0:1.0
lrwxrwxrwx. 1 root root 0 2011-07-28 16:25 1-3 -> ../../../devices/pci0000:00/0000:00:02.1/usb1/1-3
lrwxrwxrwx. 1 root root 0 2011-07-28 16:25 1-3:1.0 -> ../../../devices/pci0000:00/0000:00:02.1/usb1/1-3/1-3:1.0
lrwxrwxrwx. 1 root root 0 2011-07-01 10:10 2-0:1.0 -> ../../../devices/pci0000:00/0000:00:02.0/usb2/2-0:1.0
lrwxrwxrwx. 1 root root 0 2011-07-01 10:10 usb1 -> ../../../devices/pci0000:00/0000:00:02.1/usb1
lrwxrwxrwx. 1 root root 0 2011-07-01 10:10 usb2 -> ../../../devices/pci0000:00/0000:00:02.0/usb2


Как нетрудно догадаться новое тут устройство 1-3, к нему и была применина команда

Код: Выделить всё

echo suspend > /sys/bus/usb/devices/1-3/power/level

В общем устройство из списка lsusb пропадает, после включения появляется...
Завтра опробую уже на 3G модеме, а не на флэшке и отпишу. :)
Спасибо сказали: