如何在内核3.7.10或更高版本上禁用USB自动挂起?


37

我已将HTPC从内核3.7.10更新到3.10.7,看来CONFIG_USB_SUSPEND现在已从内核选项中删除,并包含在PM中。

我面临的主要问题是我有一个外部HDD,并且在挂起和唤醒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可以解决该问题,因为HDD可以自行处理其休眠方式,并且挂载点始终是可访问的。当HDD处于睡眠状态并且HTPC需要HDD挂载点上的东西时,HDD本身会唤醒并且可以正常运行。

现在,我尝试了以下操作,但均未成功:

  1. 手动将/ sys / bus / usb / devices / usb * / power / control更改为“ on”,而不是“ auto”
  2. 手动将/ sys / bus / usb / devices / usb * / power / autosuspend更改“ -1”而不是“ 0”

但是,当再次唤醒HTPC时,挂载点将再次无法访问。作为workarround,我可以卸载并重新安装挂载点,它可以再次正常工作,但是我确信应该有一种避免操作系统让USB自动挂起的方法。

知道如何在3.7.10或更高版本的内核上禁用USB自动挂起吗?


尾巴/sys/bus/usb/devices/<BUS>-<DEVPATH>/power/persist给你1吗?不grep CONFIG_PM_RUNTIME /boot/config-$(uname -r)给你ypower-management.txt
Runium

1
power/persist给定了1我没有任何配置文件/bootCONFIG_PM_RUNTIME=y在内核.config文件中配置。
彼得

Answers:


32

对于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
Rael,非常感谢。最新版本的Kali也是如此。我添加了以上内容,我的USB IRToy(v2)现在可以正常工作。
joat

1
我在一个mPCIE插槽中有一个USB卡,只是不想知道真相。正在运行Debian Jessie。这解决了我的问题,解决了巨大的麻烦,谢谢!
xebo 2015年

我在Ubuntu 15.10中尝试过此方法,但未应用该值(该值为2)。还有什么我可以尝试的吗?
乔纳斯·阿德勒

我仍然在14.04。但是afaik,在最新的内核版本中,要更改的参数是autosuspend_delay_ms
Rael Gugelmin Cunha

19

根据内核树文档,自动挂起的空闲延迟时间由中的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显示为-1cat /sys/module/usbcore/parameters/autosuspend我还是得到了2
彼得,彼得,

1
@Peter:autosuspend已弃用。新文件autosuspend_delay_ms将花费ms而不是秒。参考。但是power/control设置为on应该具有相同的效果。
Runium

@Sukminder,我该如何配置才能永远禁用自动暂停?我已经尝试autosuspend=-1modprobe.dand kernel参数中使用它,但是HDD仍然挂起并且不能很好地唤醒。
彼得

1
@Peter:如果我知道我会告诉你的:)。我只引用什么文档。说。你的pt 据我所知,您的帖子中的1应该已经完成​​,我不知道为什么不这样做。你有没有尝试设置autosuspend_delay_ms-1?(在/sys/bus/usb/devices/<device>/power/autosuspend_delay_ms
Runium

1
我在4.4内核上,autosuspend_delay_ms不在那里。但是autosuspend是。
马里亚诺·杜邦

2

由于将Linux Mint Debian Edition系统升级到内核​​,因此与Microsoft Wheel Mouse Optical USB和PS / 2兼容存在类似的问题。怀疑内核的USB电源管理有不适当的自动挂起。在Debian中,它作为模块编译到内核​​中。3.10-2-amd64usbcore

您可以通过在命令行中发出以下命令来永久更改此设置:

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,此处描述的操作在这种情况下不起作用,因为我们之前已经回答了它们。
彼得
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.