Pet*_*ter 47 kernel usb power-management suspend
我已经将我的 HTPC 从内核3.7.10更新到3.10.7,似乎CONFIG_USB_SUSPEND现在从内核选项中消失并包含在 PM 中。
我面临的主要问题是我有一个外置硬盘,当挂起和唤醒 HTPC 时,系统无法使用它。HDD 唤醒(您可以听到它再次旋转),但是当您尝试访问挂载点时,您会收到以下错误:
ZOTAC ~ # ls /media
ls: reading directory /media: Input/output error
Run Code Online (Sandbox Code Playgroud)
在 dmesg 上:
[ 253.278260] EXT4-fs warning (device sdb1): __ext4_read_dirblock:908: error reading directory block (ino 2, block 0)
Run Code Online (Sandbox Code Playgroud)
在以前的内核中,设置 CONFIG_USB_SUSPEND=N 可以解决这个问题,因为 HDD 会自行处理其休眠状态,并且挂载点始终是可访问的。当 HDD 处于睡眠状态并且 HTPC 需要 HDD 安装点的某些内容时,HDD 本身会唤醒并正常运行。
现在我尝试了以下但没有成功:
但是当再次唤醒HTPC时,挂载点再次无法访问。作为解决方法,我可以卸载并重新安装挂载点,它可以再次正常工作,但我确信应该有一种方法可以避免让操作系统处理 USB 自动挂起。
知道如何在内核 3.7.10 或更高版本上禁用 USB 自动挂起吗?
Rae*_*nha 47
对于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"
Run Code Online (Sandbox Code Playgroud)
请注意,quiet splash
已经存在的选项。因此,请保留您拥有的其他选项。
保存文件后,更新grub:
sudo update-grub
Run Code Online (Sandbox Code Playgroud)
并重启。
现在检查autosuspend
值:
cat /sys/module/usbcore/parameters/autosuspend
Run Code Online (Sandbox Code Playgroud)
它应该显示-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.
Run Code Online (Sandbox Code Playgroud)
Tho*_*man 20
根据内核树文档,自动挂起空闲延迟时间由 中的autosuspend
模块参数控制usbcore
。将初始默认空闲延迟设置为 -1 将阻止任何 USB 设备的自动挂起。您应该仍然能够为选定的设备启用自动挂起。
在usbcore.autosuspend
当模块被手动加载的内核参数可设置为:
$ modprobe usbcore autosuspend=-1
Run Code Online (Sandbox Code Playgroud)
或者通过将以下行添加到配置文件中/etc/modprobe.d
:
options usbcore autosuspend=-1
Run Code Online (Sandbox Code Playgroud)
如果usbcore
编译进内核,可以通过在内核命令行中添加以下内容来调整参数:
usbcore.autosuspend=-1
Run Code Online (Sandbox Code Playgroud)
最后,可以通过执行以下操作在运行时调整该选项:
echo -1 >/sys/module/usbcore/parameters/autosuspend
Run Code Online (Sandbox Code Playgroud)
此更改将影响所有新的 USB 设备。已经存在的设备不会受到影响。