我已经从内核更新了我的 HTPC3.7.10到3.10.7看来CONFIG_USB_SUSPEND现在已从内核选项中消失并包含在 PM 中。
我面临的主要问题是我有一个外部硬盘,当挂起和唤醒 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 本身将被唤醒并正常运行。
现在我已经尝试了以下方法但没有成功:
- 手动更改/sys/总线/USB/设备/USB*/电源/控制到“在”代替“汽车”。
- 手动更改/sys/bus/usb/devices/usb*/power/autosuspend到“-1”代替“0”。
但是当再次唤醒HTPC时,挂载点又无法访问。作为解决方法,我可以卸载并重新安装挂载点,它可以再次正常工作,没有问题,但我确信应该有一种方法可以避免让操作系统处理 USB 自动挂起。
知道如何在内核 3.7.10 或更高版本上禁用 USB 自动挂起吗?
答案1
为了乌班图和德班,usbcore
被编译到内核中,因此在/etc/modprobe.d
will创建条目不是工作。相反,我们需要更改内核启动参数。
编辑/etc/default/grub
文件并更改行GRUB_CMDLINE_LINUX_DEFAULT
以添加usbcore.autosuspend=-1
选项:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash usbcore.autosuspend=-1"
请注意,quiet splash
已经存在选项。因此,请保留您还有的其他选择。
保存文件后,更新grub:
sudo update-grub
和重启。
现在检查autosuspend
值:
cat /sys/module/usbcore/parameters/autosuspend
它应该显示-1
.
附加信息
在内核文档中指出,将来的某一天这个参数将更改为autosuspend_delay_ms
(而不是autosuspend
),但到目前为止,仍然是相同的名称。
该值的文档-1
可以在内核源文件中找到drivers/usb/core/hub.c
:
1808: * - If user has indicated to prevent autosuspend by passing
1809: * usbcore.autosuspend = -1 then keep autosuspend disabled.
答案2
根据内核树文档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 设备。现有设备不会受到影响。
答案3
我有一个类似的问题兼容 Microsoft 滚轮鼠标光学 USB 和 PS/2自从升级了Linux Mint Debian 版系统到内核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
。