6

У меня есть устройство USB (модем), который действительно привередлив. Иногда работает нормально, но иногда отказывается подключаться. Единственное решение, которое я нашел, чтобы исправить это, как только оно входит в плохое состояние, это физически отключить устройство и снова подключить его. Однако у меня не всегда есть физический доступ к машине, к которой он подключен, поэтому я ищу способ сделать это через командную строку.

Этот пост предлагает запустить:

$ sudo modprobe -w -r usb_storage; sudo modprobe usb_storage

Однако я получаю вывод «неизвестная опция -w». Это слегка измененная команда:

$ sudo modprobe -r usb_storage

Сбой с сообщением FATAL: модуль usb_storage используется. Если я попытаюсь убить -9, процессы, помеченные [usb-storage] перед запуском, откажутся умереть (я думаю, потому что они тесно связаны с ядром).

Кто-нибудь знает способ сделать это?

ПРИМЕЧАНИЕ: я сделал кросс-пост на serverfault, так как я не знал, что было более подходящим. Я буду удалять и / или ссылаться на тот, кто ответит первым.

5 ответов5

4

У меня Ubuntu 14.04.4. Я понятия не имею, работает ли это в 10.04. Я тестировал его на Cyborg Rumble Pad (и на USB-накопителе).

Сразу после подключения устройства:

dmesg | grep usb | tail -n 20

Я получаю (может быть, между прочим):

[ 2875.790610] usb 2-1.2: new full-speed USB device number 7 using ehci-pci
[ 2875.887485] usb 2-1.2: New USB device found, idVendor=0738, idProduct=cb02
[ 2875.887489] usb 2-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 2875.887490] usb 2-1.2: Product: Cyborg Rumble Pad - PC/Xbox 360
[ 2875.887492] usb 2-1.2: Manufacturer: Saitek
[ 2875.887493] usb 2-1.2: SerialNumber: 0CFE6B97

Важнейшей частью является строка 2-1.2 . Он идентифицирует порт USB. Хорошей новостью является то, что это не должно измениться, если я не подключу устройство к другому порту, поэтому мне нужно получить строку только один раз.

Далее я иду в нужное место:

cd /sys/bus/usb/drivers/usb

и вызвать от имени пользователя root (например, сначала sudo bash ):

echo 2-1.2 > unbind ; sleep 3 ; echo 2-1.2 > bind

В результате мой Rumble Pad повторно инициализирует себя, как будто он был отключен и снова подключен. Я также проверил свою флешку. Он (его светодиод) ведет себя так, как будто ничего не произошло, но мой KDE реагирует и спрашивает, хочу ли я монтировать.

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

1

Вы можете попробовать сбросить USB-устройство с помощью usbreset . Вот ссылка на источник - http://marc.info/?l=linux-usb&m=121459435621262&w=2

Вы просто ищете устройство, которое хотите сбросить (lsusb):

# lsusb
Bus 005 Device 004: ID 0951:1642 Kingston Technology DT101 G2

а потом:

# usbreset /dev/bus/usb/005/004
0

Это решение "выхода из положения", но оно может сработать.

  • Получите второй, старый, не очень мощный ПК. Установите Debian на него. Установите на него usbip .
  • Затем установите usbip на свой сервер.
  • Подключите модем ко второму ПК. Настройте usbip на обеих машинах так, чтобы модем, подключенный ко второму ПК, был доступен через VHCI с сервера.
  • Сконфигурируйте ssh на втором ПК или другими средствами, чтобы вы могли подключиться к нему и выдавать команды.
  • Когда устройство выходит из строя, войдите в систему и перезагрузите второй компьютер с помощью команды reboot , а затем, как только оно вернется, подключитесь, используя те средства, которые предоставляет usbip (я на самом деле никогда не использовал usbip). Это должно перезагрузить устройство. Вы, вероятно, могли бы написать это.
0

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

  1. купить 4-портовый USB-концентратор DELOCK 87445 (Google для <DELOCK 87445>)
  2. это оборудование совместимо с hub-ctrl.c (Google для <hub-ctrl.c>). Таким образом, произвольные порты могут быть включены / выключены. Для получения дополнительной информации см. Также: http://code.google.com/p/wl500g/source/browse/branches/rt-n/utils/hub-ctrl.c?r=2235.
0

Почему вы пытаетесь выгрузить модуль usb_storage , когда ваше устройство является USB-модемом?

запустите sudo lshw и найдите запись для вашего модема usb. Должна быть строка configuration: вот так (очевидно, ваш драйвер будет другим):

configuration: ... driver=iwlagn ...

убедитесь, что модуль загружен (подставив правильное имя драйвера):

lsmod | grep iwlagn

тогда просто сделайте:

sudo modprobe -r iwlagn && sleep 2 && sudo modprobe iwlagn

Мне нравится ставить там sleep на случай, если устройство выключится.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .