Хард ресет USB в Ubuntu 10.04

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

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

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

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

$ sudo modprobe -r usb_storage

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

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

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

7 ответов

У меня 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 реагирует и спрашивает, хочу ли я монтировать.

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

Вы можете попробовать сбросить 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

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

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

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

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

configuration: ... driver=iwlagn ...

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

lsmod | grep iwlagn

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

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

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

Я использую Fedora, у меня сработала отвязка и привязка USB-контроллеров. Обратите внимание, что идентификатор контроллера отличается от производителя к производителю, поэтому сначала вам нужно найти идентификатор контроллера в каталоге ниже:

/sys/bus/pci/drivers/ehci_hcd

Идентификатор производителя имеет вид0000:00:xx.y.

Отвязка:

      cd /sys/bus/pci/drivers/xhci_hcd
echo -n "0000:00:xx.y" > unbind

Обвязка:

      echo -n "0000:00:xx.y" > bind

есть утилита uhubctl , которая делает это возможным. (даже с Raspberry Pi)

вот пример использования:

      sudo uhubctl -p 2 -a cycle

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

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