btusb.enable_autosuspend=n 的真正作用是什么?

btusb.enable_autosuspend=n 的真正作用是什么?

Linux 中的蓝牙是一团糟。经过几个小时的尝试让蓝牙甚至打开后,我发现将其添加到 grub 中可以解决问题,现在它至少可以打开,尽管不与任何设备配对。

我去重新配置了我的 GRUB 旧版/etc/default/grub并添加了

GRUB_CMDLINE_LINUX_DEFAULT=btusb.enable_autosuspend=n

但有人能告诉我这实际上做了什么以及为什么有效吗?

我的猜测是它告诉蓝牙不要自动挂起,但是为什么蓝牙在打开我的拱门设备时首先会这样做呢?

我在配备 Intel centrum 1000 N 的 Dell 上使用 Arch linux

答案1

首先,我们来看看您真正拥有的是哪种蓝牙适配器。考虑到 Intel Centrino WirelessN 1000 适配器的网络规格它不支持蓝牙这是一个PCIe 半迷你卡,并且上面引用的 btusb 参数正在影响您的设置,您应该查看输出以lsusb -tv查找您的戴尔中安装了哪个 USB 蓝牙适配器。您应该确认您没有使用任何假冒的 Barrot 8041A02 克隆,已知无论如何btusb.enable_autosuspend设置,都存在各种暂停和恢复问题

在最新的稳定内核(撰写本文时为 v5.12)中,btusb.enable_autosuspend布尔内核参数会影响是否usb_enable_autosuspend会被调用探测 btusb 设备时

如记录在USB 电源管理内核文档:

驱动程序可以通过调用以下命令为其设备启用自动挂起:

usb_enable_autosuspend(struct usb_device *udev);

在他们的probe()如果他们知道设备能够正确挂起和恢复,则可以执行例程。这与写入auto设备的属性完全相同power/control。同样,驱动程序可以通过调用禁用自动挂起:

usb_disable_autosuspend(struct usb_device *udev);

on这与写入属性完全相同power/control

有时驱动程序需要确保在自动挂起期间启用远程唤醒。例如,如果用户无法通过在键盘上打字来使键盘进行远程唤醒,那么自动挂起键盘就没有多大意义。如果驱动程序设置intf->needs_remote_wakeup为 1,则如果远程唤醒不可用,内核将不会自动挂起设备。 (但是,如果设备已经自动挂起,设置此标志不会导致内核自动恢复它。通常驱动程序会在其探测方法中设置此标志,此时保证设备不会自动挂起。)

如果没有有关您的戴尔的更多详细信息,并且鉴于上述文档,我只能假设:

  1. 您有一个 USB 蓝牙设备,其开机时间足够长,可以被发现,但在您完成与另一台设备的配对过程之前已自动挂起。
  2. 您已成功配对,但您的适配器已进入睡眠状态,并且您的 HID 键盘/鼠标无法再次唤醒它。

您应该grep . /sys/bus/usb/devices/*/power/wakeup对照 的输出检查 的输出,lsusb -tv以确认该输出/sys/bus/usb/devices/${Bus}-${Port}/power/wakeup适用enabled于您的蓝牙适配器。您可以使用以下命令在所有 USB 设备上启用唤醒功能,以便进行测试,而无需调整内核启动参数并重新启动:

echo enabled | sudo tee -a /sys/bus/usb/devices/*/power/wakeup

相关内容