Linux:如何在不重新启动操作系统的情况下重置蓝牙适配器?

Linux:如何在不重新启动操作系统的情况下重置蓝牙适配器?
  1. 我有一个板载蓝牙设备,它在启动几个小时后因此错误而停止工作。我不明白这种行为的原因是什么,所以我决定使用另一种方法。我需要重新启动蓝牙适配器而不重新启动操作系统。 在此处输入图片描述

  2. 使用ls -lA /sys/class/bluetooth/,我确保系统日志中有缺陷的设备的 PCI 地址属于蓝牙: 在此处输入图片描述

  3. 使用find /sys | grep drivers.*00:04.1,我找出哪个驱动程序00:04.1绑定到: 在此处输入图片描述

  4. 我使用成功解除了HSU serial驱动程序的绑定。您可以看到没有输出任何内容: 00:04.1echo -n "0000:00:04.1" | sudo tee /sys/bus/pci/drivers/"HSU serial"/unbindhciconfig在此处输入图片描述

  5. 但我无法将HSU serial驱动程序绑定回00:04.1No such device出现错误: 在此处输入图片描述

  6. 我也尝试指定供应商8086和设备名称1191,但没有帮助: 在此处输入图片描述

  7. 使用lspci -nn,我看到该设备00:04.1存在于操作系统中: 在此处输入图片描述

如何使蓝牙适配器工作,是通过绑定驱动程序,还是通过修复导致蓝牙崩溃的原始错误?

答案1

对我来说,我首先更新了蓝牙固件:https://bugs.launchpad.net/ubuntu/+source/linux-firmware/+bug/1542743

然后,当蓝牙适配器崩溃时,神奇地重置它的是这个删除 mod 的命令:

sudo rmmod ath3k 

然后按照这个命令重新插入 mod:

sudo modprobe ath3k

我猜如果你有 atheros 蓝牙驱动程序,这个应该可以。其他模块是 btusb 和 btintel,也试试这些。

答案2

在更新至 20.04 (focal) 之前,我遇到了一些奇怪的蓝牙问题

那么这个脚本就可以解决问题,也许它也可以“修复”你的问题:

$ type -a bt
bt is a function
bt () 
{ 
    case $1 in 
        on)
            rfkill unblock bluetooth
        ;;
        off)
            rfkill block bluetooth
        ;;
        *)
            echo "use: bt on | off";
            return 1
        ;;
    esac
}

答案3

service bluetooth restart可能与sudo

相关内容