Как отключить автоматическое отключение USB на ядре 3.7.10 или выше?

38

Я обновил свой HTPC от ядра 3.7.10 до 3.10.7 и, кажется CONFIG_USB_SUSPEND теперь ушел из опций ядра и включен в личке.

Основная проблема, с которой я сталкиваюсь, заключается в том, что у меня есть внешний жесткий диск, и при приостановке и пробуждении HTPC он недоступен для системы. HDD просыпается (вы слышите, как он снова начинает вращаться), но при попытке доступа к точке монтирования выдается следующая ошибка:

ZOTAC ~ # ls /media
ls: reading directory /media: Input/output error

И на dmesg:

[  253.278260] EXT4-fs warning (device sdb1): __ext4_read_dirblock:908: error reading   directory block (ino 2, block 0)

В предыдущих ядрах установка CONFIG_USB_SUSPEND = N решала бы проблему, так как жесткий диск самостоятельно обрабатывал бы режим гибернации, а точка монтирования всегда была доступна. Когда жесткий диск находился в спящем режиме, а HTPC требовалось что-то из точки монтирования жесткого диска, сам жесткий диск просыпался и работал без проблем.

Прямо сейчас я безуспешно пробовал следующее:

  1. Вручную измените / sys / bus / usb / devices / usb * / power / control на «on» вместо «auto» .
  2. Вручную измените / sys / bus / usb / devices / usb * / power / autosuspend на «-1» вместо «0» .

Но при повторном пробуждении HTPC точка монтирования снова становится недоступной. В качестве обходного пути я могу размонтировать и перемонтировать точку монтирования, и она снова работает без проблем, но я уверен, что должен быть способ избежать того, чтобы ОС управляла автоподвеской usb.

Любая идея, как отключить USB AutoSuspend на ядре 3.7.10 или выше?

Питер
источник
Хвост /sys/bus/usb/devices/<BUS>-<DEVPATH>/power/persistтебе дает 1? Дает ли grep CONFIG_PM_RUNTIME /boot/config-$(uname -r)ты y? power-management.txt
Runium
1
power/persistдает 1и у меня нет никакого файла конфигурации в /boot. CONFIG_PM_RUNTIME=yнастраивается в .configфайле ядра .
Питер

Ответы:

33

Для Ubuntu и Debian , usbcoreскомпилирован в ядре, поэтому создавать записи на /etc/modprobe.dволи НЕ работы: мы должны изменить параметры загрузки ядра.

Отредактируйте /etc/default/grubфайл и измените GRUB_CMDLINE_LINUX_DEFAULTстроку, чтобы добавить usbcore.autosuspend=-1опцию:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"

Обратите внимание, что quit splashуже были представлены варианты. Так что оставьте другие варианты у вас тоже.

После сохранения файла обновите grub:

sudo update-grub

И перезагрузка .

Теперь проверьте autosuspendзначение:

cat /sys/module/usbcore/parameters/autosuspend

И это должно отображаться -1.

В документации ядра указано, что когда-нибудь в будущем этот параметр изменится на autosuspend_delay_ms(вместо autosuspend).

Раэль Гугельмин Кунья
источник
1
Похоже, что это верно и для Debian.
Бенджамин Трент
2
Раэль, большое спасибо за это. То же самое верно и для самой последней версии Kali. Я добавил выше, и мой USB IRToy (v2) теперь работает должным образом.
Joat
1
У меня есть USB-карта в одном из слотов mPCIE и просто не хотел правду. Запуск Debian Джесси. Это решило мою проблему, решив огромную головную боль, СПАСИБО!
xebo
Я пробовал это в Ubuntu 15.10, но значение не применяется (значение 2). Есть ли что-нибудь еще, что я могу попробовать?
Джонас Адлер
Я все еще на 14.04. Но afaik, в последних версиях ядра, параметр для изменения есть autosuspend_delay_ms.
Раэль Гугельмин Кунья
20

Согласно документации дерева ядра , время простоя автоподвески определяется autosuspendпараметром модуля в usbcore. Установка начальной задержки по умолчанию равной -1 предотвратит автоматическую приостановку работы любого USB-устройства. Вы все еще должны иметь возможность включить автоподвеску для выбранных устройств.

Параметр usbcore.autosuspendядра может быть установлен, когда модуль загружается вручную:

$ modprobe usbcore autosuspend=-1

или добавив следующую строку в файл конфигурации в /etc/modprobe.d:

options usbcore autosuspend=-1

Если usbcoreон скомпилирован в ядро, параметр можно настроить, добавив следующее в командную строку ядра:

usbcore.autosuspend=-1

Наконец, опция может быть скорректирована во время выполнения, выполнив:

echo -1 >/sys/module/usbcore/parameters/autosuspend

Изменения коснутся всех новых USB-устройств. Уже существующие устройства не будут затронуты.

Томас Найман
источник
2
Я usbcoreскомпилировал в ядро, но использование modprobe.dопции, похоже, не работает. Несмотря на modprobe -c usbcore | grep autosuspendэто показывает, как -1, cat /sys/module/usbcore/parameters/autosuspendя получаю2
Питер
1
@Peter: autosuspendустарела. Новый файл, autosuspend_delay_msкоторый занимает мс вместо секунд. исх . Но power/controlнабор onдолжен иметь тот же эффект.
Runium
@Sukminder, что я должен настроить, чтобы отключить автоподвеску навсегда? Я попытался использовать autosuspend=-1оба параметра modprobe.dи kernelпараметр, но жесткий диск все еще зависает и не просыпается.
Питер
1
@Peter: Если бы я знал, я скажу тебе :). Я только цитирую, что док. говорит. Ваш пт. 1 в вашем посте следовало сделать это, насколько я могу судить, я понятия не имею, почему это не так. Вы пытались установить autosuspend_delay_msна -1? (In /sys/bus/usb/devices/<device>/power/autosuspend_delay_ms)
Runium
1
Я на ядре 4.4 и autosuspend_delay_msне там. Но есть autosuspend.
Мариано Дюпон
3

У меня похожая проблема с Microsoft Wheel Mouse Optical USB и PS / 2, совместимыми с момента обновления системы Linux Mint Debian Edition до ядра 3.10-2-amd64. Подозревалось неправильное автоматическое приостановление управления питанием USB ядра . В Debian это компилируется как usbcoreмодуль в ядро.

Вы можете изменить это навсегда, введя в командной строке:

sudo echo "options usbcore autosuspend=-1" | sudo tee /etc/modprobe.d/disable-usb-autosuspend.conf > /dev/null

Некоторые ядра могут потребовать autosuspend=0, однако.

Если ваша система использует initrd(скорее всего, так), то пересоберите initrdядро.

Например:

uname -r
sudo dpkg-reconfigure linux-image-3.10-2-amd64

Перезагрузитесь и проверьте с помощью:

cat /sys/module/usbcore/parameters/autosuspend

который должен дать -1сейчас.

Серж Строобандт
источник
Я не использую, initrdи действия, описанные здесь, не работают в этом случае, как мы уже отвечали ранее.
Питер