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

5 grub arch-linux linux-kernel command grub-legacy

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

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

GRUB_CMDLINE_LINUX_DEFAULT=btusb.enable_autosuspend=n

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

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

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

Tys*_*son 1

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

\n

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

\n

如USB 内核文档的电源管理中所述:

\n
\n

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

\n
usb_enable_autosuspend(struct usb_device *udev);\n
Run Code Online (Sandbox Code Playgroud)\n

在他们的probe()日常工作中,如果他们知道设备能够正确挂起和恢复。auto这与写入device\xe2\x80\x99s属性完全相同power/control。同样,驱动程序可以通过调用禁用自动挂起:

\n
usb_disable_autosuspend(struct usb_device *udev);\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

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

\n
\n

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

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

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

\n
echo enabled | sudo tee -a /sys/bus/usb/devices/*/power/wakeup\n
Run Code Online (Sandbox Code Playgroud)\n